Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment réparer MySql :taille de la colonne d'index trop grande (migration Laravel)

Comme vous pouvez le voir dans le message d'erreur - "La taille maximale de la colonne est de 767 octets", si vous souhaitez créer un index dessus. Un VARCHAR(255) la colonne peut prendre jusqu'à 765 (255*3) octets en utilisant utf8 et 1020 (255*4) octets en utilisant utf8mb4 . C'est parce que dans MySQL utf8 prend jusqu'à 3 octets et utf8mb4 jusqu'à 4 octets (le vrai UTF8). Créant ainsi un VARCHAR(255) index (unique) avec utf8mb4 échouera.

Voici vos options pour résoudre le problème :

Définir le classement par défaut dans my.ini :

collation_server=utf8_unicode_ci
character_set_server=utf8

Définir le classement par défaut pour la base de données lors de la création :

CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'

Définir le classement par défaut pour la table/colonne. (Je ne le recommande pas)

Changez la taille de la colonne à 190 (varchar(190) ) ou moins.

Correction de Laravel 5.4

La configuration du serveur Mysql est écrasée par la commande de migration de Laravel. Il définira le classement et le jeu de caractères sur la version de la configuration.

Modifiez les champs charset et collation du moteur de base de données dans le fichier de configuration de la base de données situé dans 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,
        ],
..