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

Sådan repareres MySql:indekskolonnestørrelsen er for stor (Laravel migrerer)

Som du kan se i fejlmeddelelsen - "Den maksimale kolonnestørrelse er 767 bytes", hvis du vil oprette et indeks på den. En VARCHAR(255) kolonne kan tage op til 765 (255*3) bytes ved hjælp af utf8 og 1020 (255*4) bytes ved hjælp af utf8mb4 . Dette er fordi i MySQL utf8 tager op til 3 bytes og utf8mb4 op til 4 bytes (den rigtige UTF8). Derved oprettes en VARCHAR(255) (unikt) indeks med utf8mb4 vil mislykkes.

Dette er dine muligheder for at løse problemet:

Indstil standardsortering i my.ini :

collation_server=utf8_unicode_ci
character_set_server=utf8

Indstil standardsortering for databasen, når du opretter:

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

Indstil standardsortering for tabellen/kolonnen. (Det anbefaler jeg ikke)

Skift kolonnestørrelsen til 190 (varchar(190) ) eller mindre.

Laravel 5.4 rettelse

Mysql-serverkonfigurationen overskrives af Laravels migreringskommando. Det vil indstille sorteringen og tegnsættet til konfigurationens version.

Skift felterne charset og collation af db-motoren i databasekonfigurationsfilen placeret i 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. Din adgangskode opfylder ikke de nuværende politikkrav

  2. mysql_fetch_assoc():det leverede argument er ikke en gyldig MySQL resultatressource i php

  3. FROM_TZ() Funktion i Oracle

  4. Stripning af HTML-tags i PostgreSQL