Навигация

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

Партнеры

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

Статистика

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

Урок 5.11: Строковый тип SET в MySQL

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

Более интересный тип SET представляет собой строковый объект, который может иметь ноль или большее количество значений, каждое из которых должно быть выбрано из списка допустимых значений, которые перечислены явно в спецификации столбца при создании таблицы. Значения столбца SET, которые состоят из многих значений набора, определены членами, отделяемыми запятыми (,). В следствие этого значения членов SET не могут самостоятельно содержать запятые.

Например, столбец, определенный как SET(«one», «two») NOT NULL , может иметь любое из этих значений:

«»
«оnе»
«two»
«one, two»

SET может иметь максимум 64 различных члена.

MySQL сохраняет значения SET в цифровой форме, с битом младшего разряда сохраненного значения, соответствующего первому члену набора. Если вы получаете значение SET в числовом контексте, оно представляет собой набор битов, соответствующий членам набора, которые составляют значение столбца. Например, вы можете получить числовые значения из столбца SET подобно этому:

mysql> SELECT set_col+0 FROM tbl_name;

Если число сохранено в столбце SET, биты, которые установлены в двоичном представлении числа, определяют члены набора в значении столбца.

Предположим, что столбец определен как SET («а», «b», «c», «d»). Члены имеют следующие разрядные значения (табл. 5.5):

Таблица 5.5. Пример столбца типа set

Член множества SET Десятичное значение Двоичное значение
a 1 0001
b 2 0010
c 4 0100
d 8 1000

Если вы назначаете число 9 этому столбцу (в двоичной системе это будет 1001), то первый и четвертый члены значения SET (то есть, «а» и «d») будут выбраны, и возникающим в результате значением будет «а, d».

Для значения, содержащего больше, чем один элемент SET, не имеет значения порядок элементов, в котором они перечислены, когда вы вставляете значение. Также не важно, сколько раз данный элемент перечислен в значении. Когда значение потом будет получено из таблицы, каждый элемент в нем появится лишь однажды, причем элементы будут перечислены согласно порядку, в котором они были определены при создании таблицы.

Например, если был столбец определен как SET («а», «Ь», «с», «d»), то «а, d», «d, а» и «d, а, а, d, d» будут появляться как «а, d» при получении данных из таблицы.

Значения SET сортируются в цифровой форме. То есть сначала элементы множества приводятся к их числовым значениям в двоичном виде, а уж потом сортируются результаты этой операции. Значение NULL расположится перед другими значениями.

Обычно вы выполняете SELECT на столбце SET, применяя оператор LIKE или функцию FIND_IN_SET():

mysql> SELECT * FROM tbl_name WHERE set_col LIKE "%value%";
mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET("value",set_col)>0;

Но следующее также будет работать:

mysql> SELECT * FROM tbl_name WHERE set_col = "val1,val2";
mysql> SELECT * FROM tbl_name WHERE set_col & 1;;

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

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