Spec-Zone .ru
спецификации, руководства, описания, API

11.4.5. SET Ввести

A SET строковый объект, у которого могут быть нуль или больше значений, каждое из которых должно быть выбрано из списка разрешенных значений, определенных, когда таблица составляется. SET значения столбцов, которые состоят из многократных элементов множества, определяются с элементами, разделенными запятыми (","). Последствие этого - это SET задействованные значения не должны самостоятельно содержать запятые.

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

'''one''two''one,two'

A SET у столбца может быть максимум 64 отличных элементов. У таблицы может быть не больше, чем 255 уникальных определений списка элемента среди ENUM и SET столбцы, которые рассматривают как группу. Для получения дополнительной информации по этому пределу см. Раздел D.10.5, "Пределы, Наложенные .frm Файловая структура".

Двойные значения в определении вызывают предупреждение, или ошибку, если строгий режим SQL включается.

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

Когда получено, значения сохранены в a SET столбец выводится на экран, используя lettercase, который использовался в определении столбца. Отметьте это SET столбцы могут быть присвоены набор символов и сопоставление. Для двоичных или чувствительных к регистру сопоставлений lettercase принимается во внимание, присваивая значения столбцу.

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

mysql> SELECT set_col+0 FROM tbl_name;

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

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

Если Вы присваиваете значение 9 к этому столбцу, который является 1001 в двоичном файле, таким образом, первое и четвертое SET элементы значения 'a' и 'd' выбираются и получающееся значение 'a,d'.

Для значения, содержащего больше чем один SET элемент, не имеет значения, что упорядочивает элементы, перечисляются в том, когда Вы вставляете значение. Также не имеет значения, сколько времен данный элемент перечисляется в значении. Когда значение получается позже, каждый элемент в значении появляется однажды с элементами, перечисленными согласно порядку, в котором они были определены в табличное время создания. Например, предположите, что столбец определяется как SET('a','b','c','d'):

mysql> CREATE TABLE myset (col SET('a', 'b', 'c',
        'd'));

Если Вы вставляете значения 'a,d', 'd,a', 'a,d,d', 'a,d,a', и 'd,a,d':

mysql> INSERT INTO myset (col)
        VALUES -> ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');Query OK, 5 rows affected (0.01 sec)Records: 5  Duplicates: 0  Warnings: 0

Затем все эти значения появляются как 'a,d' когда получено:

mysql> SELECT col FROM myset;+------+| col  |+------+| a,d  || a,d  || a,d  || a,d  || a,d  |+------+5 rows in set (0.04 sec)

Если Вы устанавливаете a SET столбец к неподдерживаемому значению, значение игнорируется, и предупреждение выпускается:

mysql> INSERT INTO myset (col) VALUES
        ('a,d,d,s');Query OK, 1 row affected, 1 warning (0.03 sec)mysql> SHOW WARNINGS;+---------+------+------------------------------------------+| Level   | Code | Message                                  |+---------+------+------------------------------------------+| Warning | 1265 | Data truncated for column 'col' at row 1 |+---------+------+------------------------------------------+1 row in set (0.04 sec)mysql> SELECT col FROM myset;+------+| col  |+------+| a,d  || a,d  || a,d  || a,d  || a,d  || a,d  |+------+6 rows in set (0.01 sec)

Если строгий режим SQL включается, попытки вставить недопустимый SET значения приводят к ошибке.

SET значения сортируются в цифровой форме. NULL вид значений прежде не -NULL SET значения.

Функции такой как SUM() или AVG() это ожидает числовой бросок параметра параметр числу в случае необходимости. Для SET значения, работа броска заставляет числовое значение использоваться.

Обычно, Вы ищете SET значения используя FIND_IN_SET() функционируйте или LIKE оператор:

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

Первый оператор находит строки где set_col содержит value элемент множества. Второе подобно, но не то же самое: Это находит строки где set_col содержит value где угодно, как раз когда подстрока другого элемента множества.

Следующие операторы также разрешаются:

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

Первый из этих операторов ищет значения, содержащие первый элемент множества. Вторые взгляды для точного совпадения. Будьте осторожны со сравнениями второго типа. Сравнение набора оценивает 'val1,val2' возвращает различные результаты чем сравнение значений к 'val2,val1'. Следует определить значения в том же самом порядке, они перечисляются в определении столбца.

Определить все возможные значения для a SET столбец, использовать SHOW COLUMNS FROM tbl_name LIKE set_col и синтаксический анализ SET определение в Type столбец вывода.

В API C, SET значения возвращаются как строки. Для получения информации об использовании метаданных набора результатов, чтобы отличить их от других строк, см. Раздел 21.8.5, "Структуры данных API C".