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,
],
..