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,
],
..