10bet网址
MySQL 5.7参考手册
相关文件10bet官方网站 本手册下载 从本手册中摘录

11.3.6 SET类型

一个是一个可以具有零个或多个值的字符串对象,每个对象必须从创建表时指定的允许值列表中选择。由多个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基本数据结构