一个集
是一个可以具有零个或多个值的字符串对象,每个对象必须从创建表时指定的允许值列表中选择。集
由多个set成员组成的列值使用逗号(,
)。其结果是集
成员值本身不应该包含逗号。
例如,指定为的列SET(' 1 ', ' 2 ') NOT NULL
可以拥有这些值中的任何一个:
''''''两个''一,两个'
一个集
列最多可具有64个不同的成员。表中的表格不能超过255个唯一的唯一元素列表定义枚举
和集
被视为组的列。有关此限制的更多信息,请参阅.MMM文件结构强加的限制。
在定义中的重复值会导致警告,或者如果启用了严格的SQL模式,则错误。
尾随空格自动删除集
创建表时,表定义中的成员值。
看到第11.3.1节,“字符串数据类型语法”为集
类型语法和长度限制。
检索时,存储在a中的值集
使用列定义中使用的字段显示显示列。注意集
可以为列分配一个字符集和排序规则。对于二进制或区分大小写的校集,将字母表分配给列时被删除。
MySQL存储集
数值,存储值的低阶位对应于第一个集合成员。如果你检索到集
值,则检索到的值具有与组成列值的集合成员对应的位集。例如,您可以从集
如图所示的列:
mysql >选择set_col+0来自tbl_name.;
如果将数字存储到集
列中,在数字的二进制表示中设置的位确定列值中的集合成员。指定为的列集(a, b, c, d)
,成员具有以下十进制和二进制值。
集 成员 |
十进制值 | 二进制值 |
---|---|---|
“一个” |
1 |
0001 |
“b” |
2 |
0010 |
“c” |
4 |
0100. |
' d ' |
8 |
1000 |
如果你给。赋值9
到这一列,即1001
二进制的,第一和第四集
值的成员“一个”
和' d '
选择并产生的值是“a, d '
。
对于包含多个的值集
元素,无论您插入值时都列出了元素的顺序无关紧要。在该值中列出了给定元素的次数也不重要。当稍后检索值时,值中的每个元素出现一次,其中根据在表创建时间下指定的顺序列出的元素。假设将列指定为集(a, b, c, d)
:
mysql > CREATE TABLE myset(坳组(a, b, c, d '));
如果你插入值“a, d '
,' d '
,“a, d, d”
,“a, d,“
, 和' d, d '
:
mysql>插入myset(col)值 - >('a,d'),('d,a'),('a,d,a'),('a,d,d'),('d,广告');查询OK,5行受影响(0.01秒)记录:5重复:0警告:0
然后所有这些值显示为“a, d '
当检索:
mysql>从myset中选择col;+ ------ + |col |+ ------ + |A,D ||A,D ||A,D || a,d | | a,d | +------+ 5 rows in set (0.04 sec)
如果你设置集
列到不受支持的值,忽略该值并发出警告:
mysql>插入myset(col)值('a,d,d,s');查询OK,1行受影响,1个警告(0.03秒)MySQL> Show Warnings;+ --------- + ------ + -------------------------------------------------- + |水平|代码|消息|+ --------- + ------ + -------------------------------------------------- + |警告|1265 |在第1行截断的数据截断为“col”| +---------+------+------------------------------------------+ 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模式,则尝试插入无效集
值导致错误。
集
值按数字排序。空值
值排序在non-之前空值
集
值。
函数如SUM ()
或者AVG ()
如果需要,期望数字参数将参数投入数字。为了集
值时,强制转换操作将导致使用数值。
通常,你搜索集
值使用FIND_IN_SET ()
功能或者喜欢
接线员:
mysql> SELECT * FROMtbl_name.哪里find_in_set('价值”,set_col) > 0;mysql> SELECT * FROMtbl_name.在哪里set_col像“%价值%';
第一个语句查找行set_col
包含了价值
组的成员。第二个类似,但不相同:它在哪里查找行set_col
包含价值
任何地方,甚至作为另一个集合成员的子字符串。
也允许下列语句:
mysql> SELECT * FROMtbl_name.在哪里set_col& 1;mysql> SELECT * FROMtbl_name.在哪里set_col= 'val1,val2”;
这些语句中的第一个查找包含第一组成员的值。第二个寻求完全匹配。小心第二种类型的比较。将集值与”
返回与比较值不同的结果val1
,val2
””
。您应该按照列定义中列出的顺序指定值。val2
,val1
”
确定a的所有可能值集
列,使用显示列
并解析tbl_name.
喜欢set_col
集
定义的类型
输出列。
在C API中,集
值作为字符串返回。有关使用结果集元数据的信息,以将它们与其他字符串区分开来,请参阅C API基本数据结构。