Spec-Zone.ru › MariaDB

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    |
+------+

См. также

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

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/enum/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API