Ошибка SQL: слишком большой размер строки для VARCHAR (20) - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь создать столбец с именем "brand_slug", типа VARCHAR (20), nullable, collation "utf8mb4_unicode_ci", и я получаю сообщение об ошибке:

Ошибка SQL: слишком большой размер строки. Максимальный размер строки для используемой таблицы тип, не считая BLOB, равен 65535.

Странная вещь в том, что для некоторых столбцов VARCHAR это позволяет мне сделать их до 255, в то время как для других только 50 или 75, а в данном случае даже не таблицы. Все это происходит в одной таблице.

Я использую движок InnoDB.

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Я подозреваю (не видя SHOW CREATE TABLE), что ваш стиль написания схемы имеет большинство этих недостатков:

  • Не используйте вслепую (255) на VARCHARs;используйте разумные ограничения.
  • Не используйте сотни строк в одной таблице.
  • Рассмотрите возможность "нормализации" любых строк, которые имеют много повторяющихся значений.
0 голосов
/ 06 марта 2019

Решение для таблиц InnoDB обычно заключается в изменении формата строки:

ALTER TABLE mytable ROW_FORMAT=DYNAMIC;

Ограничение размера строки будет по-прежнему ограничено, но оно сможет разместить в строке больше столбцов VARCHAR / BLOB / TEXT.

Прежде чем вы сможете это сделать, у вас должны быть следующие параметры MySQL:

innodb_file_format = Barracuda
innodb_file_per_table = ON

Для получения дополнительной информации ознакомьтесь с документацией:

...