每枚举值有一个编号:
* 在列说明中来自允许成员值列表值用从1开始编号。
* 空字符串错误值的编号值是0。这意味着,你能使用下列SELECT语句找出被赋给无效ENUM值的行:
mysql> SELECT * FROM tbl_name WHERE enum_col=0;
* NULL值的编号是NULL。
例如,指定为ENUM("one", "two", "three")的列可以有显示在下面的值的任何一个。每个值的编号也被显示:
值 编号
NULL NULL
"" 0
"one" 1
"two" 2
"three" 3
枚举可以有最大65535个成员。
当你把值赋给一个ENUM列时,字母的大小写是无关紧要的。然而,以后从列中检索的值大小写匹配在表创建时用来指定允许值的值的大小写。
如果你在一个数字的上下文环境中检索一个ENUM,列值的编号被返回。如果你存储一个数字到一个ENUM中,数字被当作一个标号,并且存储的值是该编号的枚举成员。
ENUM值根据列说明列举的枚举成员的次序被排序。(换句话说,ENUM值根据他们的编号数字被排序) 例如,对ENUM("a", "b"),"a"排在"b"前面,但是对ENUM("b", "a"),"b"排在"a"前面。空字符串排序非空字符串之前,并且NULL排在所有其他枚举值之前。
如果你想要得到一个ENUM列的所有可能的值,你应该使用:SHOW COLUMNS FROM table_name LIKE enum_column_name并且分析在第二列的ENUM定义。
7.3.7.4 SET类型
一个SET是可以有零或多个值的一个字符串对象,其每一个必须从表创建造被指定了的允许值的一张列表中被选择。由多个集合成员组成的SET列通过由由逗号分隔(“,”)的成员被指定,其推论是该SET成员值不能包含逗号本身。
例如, 一个指定为SET("one", "two") NOT NULL的列可以有这些值的任何一个:
""
"one"
"two"
"one,two"
一个SET能有最多64个不同的成员。
MySQL用数字值存储SET值,存储值的低阶位对应于第一个集合成员。如果你在数字上下文中检索一个SET值,检索的值把位设置位对应组成列值的集合成员。如果一个数字被存储进一个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"),那么"a,d"、"d,a"和"d,a,a,d,d"在检索时将均作为"a,d"出现。
上一页 下一页