Zoals je kunt zien in de foutmelding - "De maximale kolomgrootte is 767 bytes", als je er een index op wilt maken. Een VARCHAR(255)
kolom kan tot 765 (255*3) bytes in beslag nemen met behulp van utf8
en 1020 (255*4) bytes met behulp van utf8mb4
. Dit komt omdat in MySQL utf8
duurt maximaal 3 bytes en utf8mb4
tot 4 bytes (de echte UTF8). Zo maakt u een VARCHAR(255)
(unieke) index met utf8mb4
zal mislukken.
Dit zijn uw opties om het probleem op te lossen:
Standaard sortering instellen in my.ini
:
collation_server=utf8_unicode_ci
character_set_server=utf8
Stel standaard sortering in voor de database bij het maken van:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Stel de standaardsortering in voor de tabel/kolom. (Ik raad dat niet aan)
Wijzig de kolomgrootte in 190 (varchar(190)
) of minder.
Laravel 5.4-oplossing
De Mysql-serverconfiguratie wordt overschreven door de migratieopdracht van Laravel. Het stelt de sortering en tekenset in op de versie van de configuratie.
Wijzig de velden charset
en collation
van de db-engine in het databaseconfiguratiebestand in 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,
],
..