Назад | Перейти на главную страницу

Проблема с максимальным размером строки в MySQL

У меня проблема с MySQL, у меня есть таблица с множеством текстовых полей. Когда я пытаюсь сохранить некоторые данные, я получаю эту ошибку.

Размер строки слишком велик. Максимальный размер строки для используемого типа таблицы, не считая больших двоичных объектов, составляет 8126. Вам необходимо изменить некоторые столбцы на ТЕКСТ или BLOB.

Текст, который я храню в каждом поле, не слишком длинный, всего несколько абзацев в каждом.

Что я могу сделать?

Спасибо людям, которые ответили. Размещенные вами ссылки были очень полезной базой для начала обучения.

Наконец я нашел эту страницу: http://download.oracle.com/docs/cd/E17952_01/refman-5.5-en/innodb-compression-usage.html

И я настроил my.cnf, добавив эти две строки в [mysqld] раздел:

innodb_file_per_table
innodb_file_format = Barracuda

Затем я ALTER моя таблица с этой командой через phpMyAdmin:

ALTER TABLE nombre_tabla
 ENGINE=InnoDB
 ROW_FORMAT=COMPRESSED 
 KEY_BLOCK_SIZE=8; 
 SHOW WARNINGS;

Также можно использовать другие настройки, которые вы можете прочитать по ссылке выше, но они мне понравились.

Вы можете взглянуть на Эта статья который многое объясняет о размерах строк MySQL. Важно отметить, что даже если вы используете поля TEXT или BLOB, размер вашей строки все равно может превышать 8 КБ (ограничение для InnoDB), потому что в нем хранятся первые 768 байтов для каждого поля, встроенного в страницу. Самый простой способ исправить это - использовать Формат файла Barracuda с InnoDB. Это в основном полностью избавляет от проблемы, сохраняя только 20-байтовый указатель на текстовые данные вместо сохранения первых 768 байтов.

Что ж, делайте, как говорит mysql: конвертируйте большие поля из varchar в текст или blob (ALTER TABLE). текстовые поля ведут себя так же, как varchar (для индексов требуется длина префикса, но тем не менее они работают), но хранятся отдельно.

В этом справочнике указаны точные ограничения для каждого стандартного движка таблиц mysql:

http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

И вот все, что нужно знать о текстовых полях:

http://dev.mysql.com/doc/refman/5.0/en/blob.html

В основном кросс-постинг из переполнения стека, но это открытая (и проверенная) ошибка в сервере MySQL Двигатель InnoDB. Временное исправление на данный момент - вернуться к MyISAM двигатель как временное хранилище. Итак, в вашем файле my.cnf:

internal_tmp_disk_storage_engine=MyISAM