Ответ 1
Он преобразует их в целые числа в INSERT/UPDATE и обратно к строкам в SELECT, поэтому внутренняя память является целыми числами, но вы не получаете ее.
Вы можете получить целое число, например SELECT mycolumn + 0
.
См. ENUM в MySQL 5
Если у меня есть таблица вроде этого:
CREATE TABLE sizes (
name ENUM('small', 'medium', 'large')
);
Является ли MySQL для хранения этих строк в каждой строке или внутренне будет использовать что-то меньшее, чем целые, чтобы узнать, какое значение перечисления ссылаться на?
Я хочу использовать перечисление в таблице, но я беспокоюсь, если это так же расточительно, как хранение строки в каждой строке.
Он преобразует их в целые числа в INSERT/UPDATE и обратно к строкам в SELECT, поэтому внутренняя память является целыми числами, но вы не получаете ее.
Вы можете получить целое число, например SELECT mycolumn + 0
.
См. ENUM в MySQL 5
Во-первых, я не стал бы беспокоиться о потреблении пространства при принятии решения о том, следует ли использовать перечисление. Дисковое пространство изобилует и дешево.
Во-вторых, он сохраняет строки в определении столбца, а затем сохраняет соответствующее перечисление в каждой записи. Согласно this значение, сохраненное в каждой записи, представляет собой числовое представление позиции значений в перечислении.
Как объясняется здесь, перечисления хранятся как значения между 0 (без действительного значения) и 65 535, которые связаны с индексом перечисления. Значение, которое хранится в таблице, представляет собой 2 байтовое значение, а не строку.