Подтвердить что ты не робот

Как MySQL хранит перечисления?

Если у меня есть таблица вроде этого:

CREATE TABLE sizes (
    name ENUM('small', 'medium', 'large')
);

Является ли MySQL для хранения этих строк в каждой строке или внутренне будет использовать что-то меньшее, чем целые, чтобы узнать, какое значение перечисления ссылаться на?

Я хочу использовать перечисление в таблице, но я беспокоюсь, если это так же расточительно, как хранение строки в каждой строке.

4b9b3361

Ответ 1

Он преобразует их в целые числа в INSERT/UPDATE и обратно к строкам в SELECT, поэтому внутренняя память является целыми числами, но вы не получаете ее.

Вы можете получить целое число, например SELECT mycolumn + 0.

См. ENUM в MySQL 5

Ответ 2

Во-первых, я не стал бы беспокоиться о потреблении пространства при принятии решения о том, следует ли использовать перечисление. Дисковое пространство изобилует и дешево.

Во-вторых, он сохраняет строки в определении столбца, а затем сохраняет соответствующее перечисление в каждой записи. Согласно this значение, сохраненное в каждой записи, представляет собой числовое представление позиции значений в перечислении.

Ответ 3

Как объясняется здесь, перечисления хранятся как значения между 0 (без действительного значения) и 65 535, которые связаны с индексом перечисления. Значение, которое хранится в таблице, представляет собой 2 байтовое значение, а не строку.