Spec-Zone .ru
спецификации, руководства, описания, API
|
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
mysql>tbl_name
WHERE FIND_IN_SET('value
',set_col
)>0;SELECT * FROM
tbl_name
WHEREset_col
LIKE '%value
%';
Первый оператор находит строки где set_col
содержит value
элемент множества. Второе подобно, но не то же самое: Это
находит строки где set_col
содержит value
где угодно, как раз когда подстрока другого элемента множества.
Следующие операторы также разрешаются:
mysql>SELECT * FROM
mysql>tbl_name
WHEREset_col
& 1;SELECT * FROM
tbl_name
WHEREset_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".