Как MySQL Store перечисляет? - PullRequest
       7

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

17 голосов
/ 03 ноября 2008

Если у меня есть такая таблица:

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

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

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

Ответы [ 3 ]

23 голосов
/ 03 ноября 2008

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

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

См. ENUM в MySQL 5

2 голосов
/ 03 ноября 2008

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

2 голосов
/ 03 ноября 2008

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

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

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