Хлоп! Существует множество неясностей с использованием чисел в поле ENUM
. Быть осторожен. Единственное, что я помню, это то, что вы можете получить доступ к значениям в ENUMS
по индексу: если ваше перечисление равно ENUM('A', 'B', 'C', '1', '2, '3')
, то эти два запроса очень разные:
INSERT INTO TABLE (example_col) VALUES( '1' ); -- example_col == 1
INSERT INTO TABLE (example_col) VALUES( 1 ); -- example_col == A
Я предполагаю, что рекомендация заключается в том, что она ограничивает допустимые значения, которые могут попасть в таблицу. Например, вставка 13 должна получить выбор по умолчанию.
Лучше было бы использовать TINYINT
вместо INT
. UNSIGNED TINYINT
имеет диапазон от 0 до 255 и занимает 1 байт для хранения . INT
занимает 4 байта для хранения. Если вы хотите ограничить значения, попадающие в таблицу, вы можете добавить триггеры ON INSERT
и ON UPDATE
, которые проверяют значения.
Если вы беспокоитесь о разнице в производительности между ENUM
и TINYINT
, вы всегда можете сравнить тесты, чтобы увидеть разницу. Эта статья кажется несколько уместной.