sql >> Databasteknik >  >> RDS >> Mysql

Så här fixar du MySql:indexkolumnstorleken är för stor (Laravel migrera)

Som du kan se i felmeddelandet - "Maximal kolumnstorlek är 767 byte", om du vill skapa ett index på den. En VARCHAR(255) kolumnen kan ta upp till 765 (255*3) byte med utf8 och 1020 (255*4) byte med utf8mb4 . Detta beror på att i MySQL utf8 tar upp till 3 byte och utf8mb4 upp till 4 byte (den riktiga UTF8). Skapar alltså en VARCHAR(255) (unikt) index med utf8mb4 kommer att misslyckas.

Det här är dina alternativ för att åtgärda problemet:

Ställ in standardsortering i my.ini :

collation_server=utf8_unicode_ci
character_set_server=utf8

Ställ in standardsortering för databasen när du skapar:

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

Ställ in standardsortering för tabellen/kolumnen. (Jag rekommenderar inte det)

Ändra kolumnstorleken till 190 (varchar(190) ) eller mindre.

Laravel 5.4-fix

Mysql-serverkonfigurationen skrivs över av Laravels migreringskommando. Det kommer att ställa in sorteringen och teckenuppsättningen till konfigurationens version.

Ändra fälten charset och collation av db-motorn i databasens konfigurationsfil som finns 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. Hur man kontrollerar om mysql-databas finns

  2. Hur sparar man Unicode-data till Oracle?

  3. Månader mellan två datum

  4. MySQL-ökande värde