Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So beheben Sie MySql:Indexspaltengröße zu groß (Laravel-Migration)

Wie Sie in der Fehlermeldung sehen können - "Die maximale Spaltengröße beträgt 767 Bytes", wenn Sie einen Index darauf erstellen möchten. Ein VARCHAR(255) Spalte kann mit utf8 bis zu 765 (255*3) Bytes aufnehmen und 1020 (255*4) Bytes mit utf8mb4 . Das liegt daran, dass in MySQL utf8 nimmt bis zu 3 Bytes und utf8mb4 bis zu 4 Bytes (das echte UTF8). So entsteht ein VARCHAR(255) (eindeutiger) Index mit utf8mb4 wird fehlschlagen.

Dies sind Ihre Optionen, um das Problem zu beheben:

Legen Sie die Standardsortierung in my.ini fest :

collation_server=utf8_unicode_ci
character_set_server=utf8

Legen Sie beim Erstellen die Standardsortierung für die Datenbank fest:

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

Legen Sie die Standardsortierung für die Tabelle/Spalte fest. (Ich empfehle das nicht)

Ändern Sie die Spaltengröße auf 190 (varchar(190) ) oder weniger.

Laravel 5.4-Fix

Die MySQL-Serverkonfiguration wird durch den Migrationsbefehl von Laravel überschrieben. Es wird die Sortierung und den Zeichensatz auf die Version der Konfiguration setzen.

Ändern Sie die Felder charset und collation der db-Engine in der Datenbankkonfigurationsdatei, die sich in config/database.php befindet .

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