Come puoi vedere nel messaggio di errore - "La dimensione massima della colonna è 767 byte", se vuoi creare un indice su di essa. Un VARCHAR(255)
la colonna può richiedere fino a 765 (255*3) byte utilizzando utf8
e 1020 (255*4) byte usando utf8mb4
. Questo perché in MySQL utf8
occupa fino a 3 byte e utf8mb4
fino a 4 byte (il vero UTF8). Creando così un VARCHAR(255)
indice (unico) con utf8mb4
fallirà.
Queste sono le tue opzioni per risolvere il problema:
Imposta le regole di confronto predefinite in my.ini
:
collation_server=utf8_unicode_ci
character_set_server=utf8
Imposta le regole di confronto predefinite per il database durante la creazione:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Imposta le regole di confronto predefinite per la tabella/colonna. (Non lo consiglio)
Modifica la dimensione della colonna in 190 (varchar(190)
) o meno.
Correzione di Laravel 5.4
La configurazione del server Mysql viene sovrascritta dal comando di migrazione di Laravel. Imposterà le regole di confronto e il set di caratteri sulla versione della configurazione.
Modifica i campi charset
e collation
del motore db nel file di configurazione del database che si trova 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,
],
..