Значения параметра MySQL ENUM влияют на максимальный размер строки? - PullRequest
0 голосов
/ 14 марта 2011

Я экспериментирую с типом данных перечисления MySQL. У меня есть таблица 15 столбцов, из которых 7 типов данных ENUM. Нет VARCHAR, максимальный столбец - введите DATETIME. Так что я должен быть в пределах 65535 байтов в MySQL. Даже в пределах 1000 байтов для InnoDB.

Типы ENUM имеют много возможностей для больших строк (в пределах 1000 с для 2 столбцов). Я просто изменил таблицу, чтобы добавить больше значений ENUM в таблицу

ALTER TABLE <tablename> MODIFY <enumCol> ([...1000 values each of max 40 bytes]);

и получил эту ошибку после этого -

ERROR 1117 (HY000): Too many columns  

Я исследовал это и обнаружил, что эта ошибка связана с максимальным размером строки для таблиц MySql. Также я читаю здесь http://dev.mysql.com/doc/refman/5.1/en/column-count-limit.html, что -

В каждой таблице есть файл .frm, содержащий определение таблицы. Сервер использует следующее выражение, чтобы проверить некоторую информацию таблицы, хранящуюся в файле, с верхним пределом 64 КБ

Эти типы значений ENUM хранятся здесь случайно, что приводит к ошибке (файл .frm> 64 КБ)? Или что-то совершенно другое происходит?

1 Ответ

2 голосов
/ 14 марта 2011

В соответствии с документацией MySQL , столбец ENUM должен занимать от 1 до 2 байт памяти в зависимости от количества опций, которые у вас есть в вашем перечислении. Поэтому его влияние должно быть минимальным на размер строки.

Однако, если у вас есть очень длинная строка в качестве возможных значений перечисления, это не повлияет на размер строки (поскольку в строке хранится только индекс, а не фактическое значение строки), но может превысить ограничение в 64 КБ файл определения таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...