Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak naprawić MySql:zbyt duży rozmiar kolumny indeksu (migracja Laravel)

Jak widać w komunikacie o błędzie - "Maksymalny rozmiar kolumny to 767 bajtów", jeśli chcesz utworzyć na niej indeks. VARCHAR(255) kolumna może zająć do 765 (255*3) bajtów przy użyciu utf8 i 1020 (255*4) bajtów przy użyciu utf8mb4 . Dzieje się tak, ponieważ w MySQL utf8 zajmuje do 3 bajtów i utf8mb4 do 4 bajtów (prawdziwy UTF8). W ten sposób tworząc VARCHAR(255) (unikalny) indeks z utf8mb4 nie powiedzie się.

Oto opcje rozwiązania problemu:

Ustaw domyślne sortowanie w my.ini :

collation_server=utf8_unicode_ci
character_set_server=utf8

Ustaw domyślne sortowanie bazy danych podczas tworzenia:

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

Ustaw domyślne sortowanie tabeli/kolumny. (Nie polecam)

Zmień rozmiar kolumny na 190 (varchar(190) ) lub mniej.

Poprawka Laravela 5.4

Konfiguracja serwera Mysql jest nadpisywana przez polecenie migracji Laravela. Ustawi sortowanie i zestaw znaków na wersję konfiguracji.

Zmień pola charset i collation silnika db w pliku konfiguracyjnym bazy danych znajdującym się w 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Stosowanie PDO na zajęciach

  2. Co tak naprawdę oznacza liczba w nawiasie?

  3. Mysql, PHP, wyszukiwanie wielu słów

  4. MySQL dodaje 12 godzin do pola czasu

  5. Kolejność usuwania z ograniczeniami klucza obcego,