sql >> Database >  >> RDS >> Mysql

Hoe MySql op te lossen:grootte van indexkolom te groot (Laravel migreren)

Zoals je kunt zien in de foutmelding - "De maximale kolomgrootte is 767 bytes", als je er een index op wilt maken. Een VARCHAR(255) kolom kan tot 765 (255*3) bytes in beslag nemen met behulp van utf8 en 1020 (255*4) bytes met behulp van utf8mb4 . Dit komt omdat in MySQL utf8 duurt maximaal 3 bytes en utf8mb4 tot 4 bytes (de echte UTF8). Zo maakt u een VARCHAR(255) (unieke) index met utf8mb4 zal mislukken.

Dit zijn uw opties om het probleem op te lossen:

Standaard sortering instellen in my.ini :

collation_server=utf8_unicode_ci
character_set_server=utf8

Stel standaard sortering in voor de database bij het maken van:

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

Stel de standaardsortering in voor de tabel/kolom. (Ik raad dat niet aan)

Wijzig de kolomgrootte in 190 (varchar(190) ) of minder.

Laravel 5.4-oplossing

De Mysql-serverconfiguratie wordt overschreven door de migratieopdracht van Laravel. Het stelt de sortering en tekenset in op de versie van de configuratie.

Wijzig de velden charset en collation van de db-engine in het databaseconfiguratiebestand 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,
        ],
..


  1. Doorzoek alle velden in alle tabellen voor een specifieke waarde (Oracle)

  2. Mysql-updatequery met voorbereide instructie geeft fout

  3. GROEP OP met MAX datum

  4. Validatie mislukt voor query voor methode JPQL