MySQL数据类型set和enum
目录
1 MYSQL数据类型set和enum 1
1.1 SET和ENUM类型 1
1 MySQL数据类型set和enum
1.1 Set和Enum类型
1. Set类型:集合,列可赋予多个集合成员。其值来自创建表时规定的允许的串集中选择,可包括串集中任意或所有成员,每个值成员之间以逗号隔开。
2. Enum类型:枚举,列可赋予某个枚举成员。其值来自创建表时规定的允许的枚举中选择,只能选择其中之一。
3.3. Set和Enum的SQL操作
创建Set和Enum
CREATE TABLE `test` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`myset` set('a','b','c') DEFAULT '',
`myenum` enum('a','b','c') DEFAULT NULL,
PRIMARY KEY (`Id`)
)
插入Set和Enum
INSERT INTO `test` VALUES (1,'a,b','a');
INSERT INTO `test` VALUES (2,'b,a,b','b');
SELECT * from test
Id Myset Myenum
1 a,b a
2 a,b b
说明:集合中可去除重复的值。
通过find_in_set()函数或like操作查取Set值。
select * from test where FIND_IN_SET('a',myset)
select * from test where myset like '%a%'
4. Set和Enum的存储大小
Set:集合最多可以有64个不同的成员。Set最多可以存储8个字节。Set列的存储大小由集合成员数目决定,对于集合成员数目为1到8,9到16,17到24,25到32,33到64的成员集合,其Set值分别站用1,2,3,4或8个字节。
Enum:枚举可具有最多65536 个成员。最多可以存储2个字节。枚举值的数目决定了Enum列的存储大小,一个字节可以存储256个值,两个字节可以存储65536个值,存储时一个字节还是两个字节依赖于枚举成员数是否大于256个。
5. Set和Enum的排序顺序
Set和Enum在定义中的值顺序决定了排序顺序,Enum定义中的值顺序就是Enum中值排序顺序,但Set中排序顺序更为复杂,因为列值可以包含多个集合成员。
Set和Enum被归为串类型是由于在建立这些类型的列时,枚举和集合成员被指定为串。但是,这些成员在内部存放时作为数值,而且同样可作为数值来处理。这表示ENUM 和S E T类型比其他的串类型更为有效,因为通常可用数值运算而不是串运算来处理它们。而且这还表示ENUM 和SET 值可用在串或数值的环境中。
select myset, myset+0 from test
Myset Myset+0
a 1
b 2
a,b 3
6. Set和Enum的缺省值
对于SET 类型,在相应的列不能包含NULL 时其缺省值实际上是空集,不过这里空集等价于空串
对于Enum类型,如果将ENUM列声明为允许NULL,NULL值则为该列的一个有效值,并且默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素。
目录
1 MYSQL数据类型set和enum 1
1.1 SET和ENUM类型 1
1 MySQL数据类型set和enum
1.1 Set和Enum类型
1. Set类型:集合,列可赋予多个集合成员。其值来自创建表时规定的允许的串集中选择,可包括串集中任意或所有成员,每个值成员之间以逗号隔开。
2. Enum类型:枚举,列可赋予某个枚举成员。其值来自创建表时规定的允许的枚举中选择,只能选择其中之一。
3.3. Set和Enum的SQL操作
创建Set和Enum
CREATE TABLE `test` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`myset` set('a','b','c') DEFAULT '',
`myenum` enum('a','b','c') DEFAULT NULL,
PRIMARY KEY (`Id`)
)
插入Set和Enum
INSERT INTO `test` VALUES (1,'a,b','a');
INSERT INTO `test` VALUES (2,'b,a,b','b');
SELECT * from test
Id Myset Myenum
1 a,b a
2 a,b b
说明:集合中可去除重复的值。
通过find_in_set()函数或like操作查取Set值。
select * from test where FIND_IN_SET('a',myset)
select * from test where myset like '%a%'
4. Set和Enum的存储大小
Set:集合最多可以有64个不同的成员。Set最多可以存储8个字节。Set列的存储大小由集合成员数目决定,对于集合成员数目为1到8,9到16,17到24,25到32,33到64的成员集合,其Set值分别站用1,2,3,4或8个字节。
Enum:枚举可具有最多65536 个成员。最多可以存储2个字节。枚举值的数目决定了Enum列的存储大小,一个字节可以存储256个值,两个字节可以存储65536个值,存储时一个字节还是两个字节依赖于枚举成员数是否大于256个。
5. Set和Enum的排序顺序
Set和Enum在定义中的值顺序决定了排序顺序,Enum定义中的值顺序就是Enum中值排序顺序,但Set中排序顺序更为复杂,因为列值可以包含多个集合成员。
Set和Enum被归为串类型是由于在建立这些类型的列时,枚举和集合成员被指定为串。但是,这些成员在内部存放时作为数值,而且同样可作为数值来处理。这表示ENUM 和S E T类型比其他的串类型更为有效,因为通常可用数值运算而不是串运算来处理它们。而且这还表示ENUM 和SET 值可用在串或数值的环境中。
select myset, myset+0 from test
Myset Myset+0
a 1
b 2
a,b 3
6. Set和Enum的缺省值
对于SET 类型,在相应的列不能包含NULL 时其缺省值实际上是空集,不过这里空集等价于空串
对于Enum类型,如果将ENUM列声明为允许NULL,NULL值则为该列的一个有效值,并且默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素。