Навигация

Поиск по Сайту

Партнеры

Самоучитель. Книги.

Статистика

    Каталог@Mail.ru - каталог ресурсов интернет

Строковый тип ENUM в MySQL.

Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Строковый тип ENUM

Тип ENUM представляет собой строковый объект, значение которого обычно выбрано из списка допустимых значений, которые перечислены явно в спецификации столбца при создании таблицы.

Значение может также быть пустой строкой («») или NULL при некоторых обстоятельствах:

  • если вы вставляете недопустимое значение в ENUM (то есть строку, которая не указана в перечне допустимых значений), взамен будет вставлена пустая строка как специальное значение ошибки. Эта строка может отличаться от нормальной пустой строки тем, что она имеет числовое значение 0. Подробнее относительно этого позже;
  • если ENUM объявлен как NULL, то NULL также представляет собой допустимое значение для столбца, а значением по умолчанию как раз и будет именно NULL. Если ENUM объявлен как NOT NULL, значением по умолчанию будет первый элемент из списка дозволенных значений.

Каждое значение перечисления имеет индекс:

  • все значения из списка допустимых элементов в спецификации столбца пронумерованы, начиная с 1 (не с 0!);
  • индексное значение пустого значения ошибки 0. Это означает, что вы можете использовать следующую инструкцию SELECT, чтобы найти строки, в которых были установлены недопустимые для ENUM значения:
mysql> SELECT * FROM tbl_name WHERE enum_col = 0;
  • индексом значения NULL является само NULL.

Например, столбец, определенный как ENUM («one», «two», «three»), может иметь любое из значений, представленных ниже (см. табл. 5.4). Индекс каждого значения также представлен.

Таблица 5.4. Пример данных для столбца типа enum

Значение Индекс
NULL NULL
«» 0
«one» 1
«two» 2
«three» 3

Перечисление может иметь максимум 65535 элементов.

Регистр неважен, когда вы присваиваете значения столбцу ENUM. Однако значения, полученные из столбца, позже принимают регистр с соответствием значений, использованных, чтобы определить допустимые значения при создании данной таблицы. То есть, если при определении столбца было задано значение «Раз», а при присвоении значения полю в таблице вы использовали «РАЗ», то сервер выдаст все равно именно «Раз», и никак иначе.

Если вы получаете ENUM в числовом контексте, то будет возвращен индекс значения столбца. Например, вы можете получать числовые значения из столбца ENUM подобно этому:

mysql> SELECT enum_col+0 FROM tbl_name;

To есть, если вы определили столбец как ENUM («Красный», «Желтый», «Зелёный»), то в контексте строки именно такие значения и вернутся. Но вот при обращении к этому столбцу в контексте числа соответственно вернутся их индексные числа: 1, 2 и 3.

Значения ENUM сортируются согласно порядку, в котором члены перечисления были указаны в спецификации столбца. Другими словами, значения ENUM сортируются согласно их индексным числам. Например, «а» окажется перед «b» для ENUM(«a»,«b»), но «Ь» опередит «а» для ENUM(«b», «а»). Пустые строки окажутся перед заполненными строками, а значения NULL перед всеми другими значениями перечисления.

Если вы хотите узнать все возможные значения для столбца типа ENUM, вы должны использовать команду SHOW COLUMNS FROM table_name LIKE enum_column_name и проанализировать определение ENUM во втором столбце вывода.