ENUM
Синтаксис
ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]
Описание
Перечисление. Строковый объект, который может иметь только одно значение, выбранное из списка значений 'value1', 'value2', ..., NULL или специальное значение ошибки ''. Теоретически, в ENUM столбце может быть максимум 65 535 различных значений; на практике реальный максимум зависит от многих факторов. ENUM значения представляются внутри как целые числа.
Пробелы в конце значений ENUM автоматически удаляются при создании таблицы.
ENUM требует относительно мало места для хранения, один или два байта в зависимости от количества значений перечисления.
Значения NULL и пустые значения
ENUM также может содержать значения NULL и пустые значения. Если для столбца ENUM разрешено значение NULL, NULL становится допустимым значением, а также значением по умолчанию (см. ниже). Если строгий SQL режим не включен, и в ENUM вставляется недопустимое значение, вставляется специальная пустая строка с индексным значением ноль (см. Числовой индекс ниже), с предупреждением. Это может быть запутанно, потому что пустая строка также является возможным значением, и единственное различие в этом случае — её индекс не 0. Вставка не удастся с ошибкой, если строгий режим активен.
Если DEFAULT опущено, значение по умолчанию будет:
-
NULLесли столбец допускает NULL; - в противном случае, первое значение в перечислении.
Числовой индекс
Значения ENUM индексируются численно в порядке их определения, и сортировка будет выполняться в этом числовом порядке. Мы рекомендуем не использовать ENUM для хранения чисел, так как выигрыша в занимаемом месте мало, а легко спутать целое число ENUM с числовым значением ENUM, опуская кавычки.
ENUM, определенный как ENUM('apple','orange','pear'), будет иметь следующие индексные значения:
| Индекс | Значение |
|---|---|
| NULL | NULL |
| 0 | '' |
| 1 | 'apple' |
| 2 | 'orange' |
| 3 | 'pear' |
Примеры
CREATE TABLE fruits (
id INT NOT NULL auto_increment PRIMARY KEY,
fruit ENUM('apple','orange','pear'),
bushels INT);
DESCRIBE fruits;
+---------+-------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| fruit | enum('apple','orange','pear') | YES | | NULL | |
| bushels | int(11) | YES | | NULL | |
+---------+-------------------------------+------+-----+---------+----------------+
INSERT INTO fruits
(fruit,bushels) VALUES
('pear',20),
('apple',100),
('orange',25);
INSERT INTO fruits
(fruit,bushels) VALUES
('avocado',10);
ERROR 1265 (01000): Data truncated for column 'fruit' at row 1
SELECT * FROM fruits;
+----+--------+---------+
| id | fruit | bushels |
+----+--------+---------+
| 1 | pear | 20 |
| 2 | apple | 100 |
| 3 | orange | 25 |
+----+--------+---------+
Выбор по числовому индексу:
SELECT * FROM fruits WHERE fruit=2; +----+--------+---------+ | id | fruit | bushels | +----+--------+---------+ | 3 | orange | 25 | +----+--------+---------+
Сортировка производится по значению индекса:
CREATE TABLE enums (a ENUM('2','1'));
INSERT INTO enums VALUES ('1'),('2');
SELECT * FROM enums ORDER BY a ASC;
+------+
| a |
+------+
| 2 |
| 1 |
+------+
Легко спутать возвращаемое целое число ENUM со значениями, хранящимися в базе данных, поэтому мы не рекомендуем использовать ENUM для хранения чисел. Первый пример возвращает поле с индексом 1 ('2' имеет значение индекса 1, так как оно определено первым), а второй пример возвращает строковое значение '1'.
SELECT * FROM enums WHERE a=1; +------+ | a | +------+ | 2 | +------+ SELECT * FROM enums WHERE a='1'; +------+ | a | +------+ | 1 | +------+
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/enum/