Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да коригирате MySql:размерът на индексната колона е твърде голям (Laravel мигриране)

Както можете да видите в съобщението за грешка - "Максималният размер на колоната е 767 байта", ако искате да създадете индекс върху нея. A VARCHAR(255) колоната може да заеме до 765 (255*3) байта с помощта на utf8 и 1020 (255*4) байта с помощта на utf8mb4 . Това е така, защото в MySQL utf8 заема до 3 байта и utf8mb4 до 4 байта (реалният UTF8). По този начин се създава VARCHAR(255) (уникален) индекс с utf8mb4 ще се провали.

Това са вашите опции за отстраняване на проблема:

Задайте съпоставяне по подразбиране в my.ini :

collation_server=utf8_unicode_ci
character_set_server=utf8

Задайте съпоставяне по подразбиране за базата данни при създаване:

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

Задайте съпоставяне по подразбиране за таблицата/колоната. (Не препоръчвам това)

Променете размера на колоната на 190 (varchar(190) ) или по-малко.

Поправка на Laravel 5.4

Конфигурацията на Mysql сървъра се презаписва от командата за миграция на Laravel. Той ще настрои съпоставянето и набора от знаци на версията на конфигурацията.

Променете полетата charset и collation на db машината в конфигурационния файл на базата данни, намиращ се в 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. Правилата за сигурност при наследяване са нарушени от тип:'MySql.Data.Entity.MySqlEFConfiguration'

  2. Има ли начин да върнете идентификатора на ред, който току-що е създаден в MySQL с PHP?

  3. SQL Server 2005 внедряване на MySQL ЗАМЕНИ В?

  4. избиране на редове с идентификатор от друга таблица

  5. Разлика между часовите зони Америка/Лос_Анджелес и САЩ/Тихоокеански регион и PST8PDT?