Som du kan se i felmeddelandet - "Maximal kolumnstorlek är 767 byte", om du vill skapa ett index på den. En VARCHAR(255)
kolumnen kan ta upp till 765 (255*3) byte med utf8
och 1020 (255*4) byte med utf8mb4
. Detta beror på att i MySQL utf8
tar upp till 3 byte och utf8mb4
upp till 4 byte (den riktiga UTF8). Skapar alltså en VARCHAR(255)
(unikt) index med utf8mb4
kommer att misslyckas.
Det här är dina alternativ för att åtgärda problemet:
Ställ in standardsortering i my.ini
:
collation_server=utf8_unicode_ci
character_set_server=utf8
Ställ in standardsortering för databasen när du skapar:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Ställ in standardsortering för tabellen/kolumnen. (Jag rekommenderar inte det)
Ändra kolumnstorleken till 190 (varchar(190)
) eller mindre.
Laravel 5.4-fix
Mysql-serverkonfigurationen skrivs över av Laravels migreringskommando. Det kommer att ställa in sorteringen och teckenuppsättningen till konfigurationens version.
Ändra fälten charset
och collation
av db-motorn i databasens konfigurationsfil som finns 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,
],
..