如何在Yii2的迁移中将charset设置为特定列

时间:2016-08-18 06:17:17

标签: character-encoding yii2 migration

我在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。 怎么做?

2 个答案:

答案 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,
]);