Както можете да видите в съобщението за грешка - "Максималният размер на колоната е 767 байта", ако искате да създадете индекс върху нея. A VARCHAR(255)
колоната може да заеме до 765 (255*3) байта с помощта на utf8
и 1020 (255*4) байта с помощта на utf8mb4
. Това е така, защото в MySQL utf8
заема до 3 байта и utf8mb4
до 4 байта (реалният UTF8). По този начин се създава VARCHAR(255)
(уникален) индекс с utf8mb4
ще се провали.
Това са вашите опции за отстраняване на проблема:
Задайте съпоставяне по подразбиране в my.ini
:
collation_server=utf8_unicode_ci
character_set_server=utf8
Задайте съпоставяне по подразбиране за базата данни при създаване:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Задайте съпоставяне по подразбиране за таблицата/колоната. (Не препоръчвам това)
Променете размера на колоната на 190 (varchar(190)
) или по-малко.
Поправка на Laravel 5.4
Конфигурацията на Mysql сървъра се презаписва от командата за миграция на Laravel. Той ще настрои съпоставянето и набора от знаци на версията на конфигурацията.
Променете полетата charset
и collation
на db машината в конфигурационния файл на базата данни, намиращ се в config/database.php
.
..
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
//'charset' => 'utf8mb4',
//'collation' => 'utf8mb4_unicode_ci',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
..