Поиск
Тип 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 во втором столбце вывода.