Som du kan se i fejlmeddelelsen - "Den maksimale kolonnestørrelse er 767 bytes", hvis du vil oprette et indeks på den. En VARCHAR(255)
kolonne kan tage op til 765 (255*3) bytes ved hjælp af utf8
og 1020 (255*4) bytes ved hjælp af utf8mb4
. Dette er fordi i MySQL utf8
tager op til 3 bytes og utf8mb4
op til 4 bytes (den rigtige UTF8). Derved oprettes en VARCHAR(255)
(unikt) indeks med utf8mb4
vil mislykkes.
Dette er dine muligheder for at løse problemet:
Indstil standardsortering i my.ini
:
collation_server=utf8_unicode_ci
character_set_server=utf8
Indstil standardsortering for databasen, når du opretter:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Indstil standardsortering for tabellen/kolonnen. (Det anbefaler jeg ikke)
Skift kolonnestørrelsen til 190 (varchar(190)
) eller mindre.
Laravel 5.4 rettelse
Mysql-serverkonfigurationen overskrives af Laravels migreringskommando. Det vil indstille sorteringen og tegnsættet til konfigurationens version.
Skift felterne charset
og collation
af db-motoren i databasekonfigurationsfilen placeret i 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,
],
..