Указать кодировку при создании таблицы в Yii2
02-12-2018Многие знают про миграции во фреймвроке Yii2, но не многие знают про дополнительные параметры у $this->createTable
. В этой статье расскажу как указать кодировку, которая "понимает" русские буквы в базе данных.
Создание миграции
Думаю тут ничего новго для вас нет. В консоле пишем код на создание миграции, которая будет отвечать за генерацию таблицы в БД:
php yii migrate/create create_table_category
После генерации миграционного файлика, открваем его на редактирование. И видем уже сгенерированный код, примерно такой:
...
public function safeUp()
{
}
/**
* {@inheritdoc}
*/
public function safeDown()
{
echo "m181202_184136_create_table_category cannot be reverted.\n";
return false;
}
...
Собственно это код миграции (safeUp()
) и код её отката (safeDown()
). Продолжаем работать с функцией safeUp()
. В неё пишем код на создание таблицы в БД. Примерно такой:
$this->createTable('category', [
'id' => $this->primaryKey(),
'image' => $this->string(),
'title' => $this->string()->notNull(),
'description' => $this->text(),
'body' => $this->text(),
]);
Так вот, теперь самое интересное:
Задаём кодировку, которая понимает русские буквы
Для этого перед $this->createTable
пишем следующее:
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
}
Т.е. объявляем переменную $tableOptions
, в которой будем харнить параметры кодировки нашей таблицы. Потом спрашиваем "если драйвер для работы с БД === mySQL
", тогда... на mySQL'шном языке объясняем что нам нужна кодировка, поддерживающая отечественные буквы.
После этого надо нашу переменную $tableOptions
куда-то впихнуть. А делается это как раз при помощи дополнительного параметра у $this->createTable
. После чего код миграции на генерацию таблицы в БД, которая будет поддерживать русские буквы будет выглядить так:
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
}
$this->createTable('category', [
'id' => $this->primaryKey(),
'image' => $this->string(),
'title' => $this->string()->notNull(),
'description' => $this->text(),
'body' => $this->text(),
], $tableOptions);
Если помог, поделись с друзьями в соцСетях. А то получается я этот функционал пили просто так =( Если поделишься, приятным бонусом будет анекдот ;)
ТЕГи: yii2 Программирование