sql >> Databáze >  >> RDS >> Mysql

Jak opravit MySql:velikost sloupce indexu je příliš velká (migrace Laravel)

Jak můžete vidět v chybové zprávě - "Maximální velikost sloupce je 767 bajtů", pokud na něm chcete vytvořit index. A VARCHAR(255) sloupec může zabrat až 765 (255*3) bajtů pomocí utf8 a 1020 (255*4) bajtů pomocí utf8mb4 . Je to proto, že v MySQL utf8 zabere až 3 bajty a utf8mb4 až 4 bajty (skutečné UTF8). Tím se vytvoří VARCHAR(255) (jedinečný) index s utf8mb4 selže.

Toto jsou vaše možnosti, jak problém vyřešit:

Nastavte výchozí řazení v my.ini :

collation_server=utf8_unicode_ci
character_set_server=utf8

Při vytváření nastavte výchozí řazení pro databázi:

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

Nastavit výchozí řazení pro tabulku/sloupec. (To nedoporučuji)

Změňte velikost sloupce na 190 (varchar(190) ) nebo méně.

Oprava Laravel 5.4

Konfigurace serveru Mysql je přepsána příkazem migrace Laravelu. Nastaví řazení a znakovou sadu na verzi konfigurace.

Změňte pole charset a collation db motoru v konfiguračním souboru databáze umístěném v 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. Jak používat relaci na webových stránkách?

  2. Jaký je ekvivalent Oracle funkce IsNull() serveru SQL?

  3. MySQL Vyberte řádky, kde je sloupec časového razítka mezi dneškem a před 10 minutami

  4. V Oracle AS alias nefunguje