Wie Sie in der Fehlermeldung sehen können - "Die maximale Spaltengröße beträgt 767 Bytes", wenn Sie einen Index darauf erstellen möchten. Ein VARCHAR(255)
Spalte kann mit utf8
bis zu 765 (255*3) Bytes aufnehmen und 1020 (255*4) Bytes mit utf8mb4
. Das liegt daran, dass in MySQL utf8
nimmt bis zu 3 Bytes und utf8mb4
bis zu 4 Bytes (das echte UTF8). So entsteht ein VARCHAR(255)
(eindeutiger) Index mit utf8mb4
wird fehlschlagen.
Dies sind Ihre Optionen, um das Problem zu beheben:
Legen Sie die Standardsortierung in my.ini
fest :
collation_server=utf8_unicode_ci
character_set_server=utf8
Legen Sie beim Erstellen die Standardsortierung für die Datenbank fest:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Legen Sie die Standardsortierung für die Tabelle/Spalte fest. (Ich empfehle das nicht)
Ändern Sie die Spaltengröße auf 190 (varchar(190)
) oder weniger.
Laravel 5.4-Fix
Die MySQL-Serverkonfiguration wird durch den Migrationsbefehl von Laravel überschrieben. Es wird die Sortierung und den Zeichensatz auf die Version der Konfiguration setzen.
Ändern Sie die Felder charset
und collation
der db-Engine in der Datenbankkonfigurationsdatei, die sich in config/database.php
befindet .
..
'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,
],
..