我在Yii2中进行了迁移,在那里我尝试创建一个表。我为桌子设置了charset,但我不知道如何为特定列设置charset。
例如:
$this->createTable('some_table', [
'column_1' => $this->string(64)->notNull(),
'column_2' => $this->integer()->notNull(),
'column_3' => $this->integer(),
], 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB');
在上面的代码中,我想设置charset" utf8-unicode-ci"对于column_1。 怎么做?
答案 0 :(得分:7)
使用append()。
$this->createTable('some_table', [
'column_1' => $this->string(64)->notNull()->append('CHARACTER SET utf8 COLLATE utf8_unicode_ci'),
'column_2' => $this->integer()->notNull(),
'column_3' => $this->integer(),
], 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB');
这只是一个例子吗?因为您不必为单个列设置charset,因为它与整个表的相同。
答案 1 :(得分:0)
对于MySQL,您可以使用以下技巧:
$schema = $this->getDb()->getSchema();
$columnBase = $schema->createColumnSchemaBuilder($schema::TYPE_STRING, 255);
$columnExtension = $schema->createColumnSchemaBuilder('CHARACTER SET utf8 COLLATE utf8_bin');
$columnExtension->notNull();
$this->createTable('{{%table1}}', [
'column1' => $columnBase . ' ' . $columnExtension,
]);