Mysql
 sql >> Database >  >> RDS >> Mysql

Come risolvere MySql:dimensione della colonna dell'indice troppo grande (migrazione di Laravel)

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