Jak widać w komunikacie o błędzie - "Maksymalny rozmiar kolumny to 767 bajtów", jeśli chcesz utworzyć na niej indeks. VARCHAR(255)
kolumna może zająć do 765 (255*3) bajtów przy użyciu utf8
i 1020 (255*4) bajtów przy użyciu utf8mb4
. Dzieje się tak, ponieważ w MySQL utf8
zajmuje do 3 bajtów i utf8mb4
do 4 bajtów (prawdziwy UTF8). W ten sposób tworząc VARCHAR(255)
(unikalny) indeks z utf8mb4
nie powiedzie się.
Oto opcje rozwiązania problemu:
Ustaw domyślne sortowanie w my.ini
:
collation_server=utf8_unicode_ci
character_set_server=utf8
Ustaw domyślne sortowanie bazy danych podczas tworzenia:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Ustaw domyślne sortowanie tabeli/kolumny. (Nie polecam)
Zmień rozmiar kolumny na 190 (varchar(190)
) lub mniej.
Poprawka Laravela 5.4
Konfiguracja serwera Mysql jest nadpisywana przez polecenie migracji Laravela. Ustawi sortowanie i zestaw znaków na wersję konfiguracji.
Zmień pola charset
i collation
silnika db w pliku konfiguracyjnym bazy danych znajdującym się w 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,
],
..