Поиск

Тип SET

SET (набор) - это строковый объект, которым может иметь от нуля и более значений, каждое из которых должно быть выбрано из списка допустимых значений, указанного при создании таблицы. Значения столбцов SET, которые состоят из множества членов, специфицируются списком членов, разделенных запятой. Следствием этого является то, что значения членов SET не могут содержать в себе запятых.
Например, столбец, объявленный как SET (' onef,' two') NOT NULL, может содержать только такие значения:
I ?
'one' 'two' 'one,two'
SET может иметь максимум 64 различных члена.
Начиная с MySQL 3.23.51, завершающие пробелы автоматически удаляются из зна­чений членов SET при создании таблицы.
MySQL хранит значения SET в числовом виде, при этом первый справа бит соответствует первому члену набора. Если вы извлекаете значение SET в числовом контексте, то оно бу­дет содержать набор битов, соответствующий членам, которые образуют значение столб­ца. Например, вы можете извлечь числовое значение столбца SET следующим образом:
mysql> SELECT cTOff6eq_set + О FROM имя_таблицы;
Если в столбце типа SET сохраняется число, биты, установленные в его двоичном представлении, определяют состав членов, входящих в значение столбца. Для столбца, определенного как SET ('a',' b',' с', 'd'), его члены имеют следующие десятичные и двоичные значения:


Член SET Десятичное Двоичное
'а' 1

0001
to

2

0010
с'

4

0100
'd'

8

1000

Если вы присвоите этому столбцу значение 9, что в двоичном виде выглядит как 1001, то будут выбраны первый и четвертый члены - 'а' и 'сГ, и результирующим зна­чением будет ' a, d'.
Для значений, содержащих более одного элемента SET, неважно, в каком порядке бы­ли указаны элементы при вставке. Неважно также, сколько раз отдельный элемент встречался в списке. Когда значение позже будет извлечено, каждый элемент в наборе появится один раз, а их последовательность будет соответствовать порядку, в котором были перечислены допустимые значения при создании таблицы. Если столбец опреде­лен как SET('a', 'b 'с', 'd'), то присвоенные значения 'a,d', 'd,a' и 'd,a,a,d,d' при извлечении дадут 'a,d'. Если вы присвоите столбцу SET неподдерживаемое значе­ние, оно будет проигнорировано.

Значения SET сортируются в соответствии с числовыми представлениями. Значения NULL предшествуют всем значениям, отличным от null. Обычно поиск значения в набо­ре осуществляется с помощью функции FIND_IN_SET() или операции LIKE:
mysql> SELECT * FROM имя_ таблицы
WHERE FIND_IN_SET('значение' , crcui6ea_se t)>0; mysql> SELECT * FROM имя__ таблицы WHERE столбец_БеЬ LIKE '%зяачение%';
Первый оператор найдет строки, в которых столбец_эеЬ содержит член набора зна­чение. Второй оператор похож, однако означает не то же самое. Он выбирает строки, в которых столбец_БеЬ содержит значение даже в виде подстроки в другом члене набора.
Следующие операторы также допустимы:
mysql> SELECT * FROM имя_таблицы WHERE столбец_БеЬ & 1;
mysql> SELECT * FROM имя_таблицы WHERE столбец_эеЬ = 'значение1, значение2';
Первый из этих операторов ищет значения, содержащие первый член набора. Вто­рой - ищет полное совпадение. Будьте осторожны со сравнениями второго типа. Срав­нение значений набора с ' значение1, значение2' вернет другой результат, чем сравне­ние с 'значение2, значение1, Вы должны указывать элементы в том же порядке, в ко­тором они перечислены в определении столбца.
Если вы хотите просмотреть все возможные значения столбца SET, воспользуйтесь SHOW COLUMNS FROM имя__таблицы LIKE croji6eu_setи проанализируйте определение set во втором столбце вывода.