Jak můžete vidět v chybové zprávě - "Maximální velikost sloupce je 767 bajtů", pokud na něm chcete vytvořit index. A VARCHAR(255) sloupec může zabrat až 765 (255*3) bajtů pomocí utf8 a 1020 (255*4) bajtů pomocí utf8mb4 . Je to proto, že v MySQL utf8 zabere až 3 bajty a utf8mb4 až 4 bajty (skutečné UTF8). Tím se vytvoří VARCHAR(255) (jedinečný) index s utf8mb4 selže.
Toto jsou vaše možnosti, jak problém vyřešit:
Nastavte výchozí řazení v my.ini :
collation_server=utf8_unicode_ci
character_set_server=utf8
Při vytváření nastavte výchozí řazení pro databázi:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Nastavit výchozí řazení pro tabulku/sloupec. (To nedoporučuji)
Změňte velikost sloupce na 190 (varchar(190) ) nebo méně.
Oprava Laravel 5.4
Konfigurace serveru Mysql je přepsána příkazem migrace Laravelu. Nastaví řazení a znakovou sadu na verzi konfigurace.
Změňte pole charset a collation db motoru v konfiguračním souboru databáze umístěném v 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,
],
..