MySQL中的ENUM类型
ENUM是MySQL中的一种字符串对象类型,用于存储一组预定义的值。它允许你在列中只能存储指定的值列表中的一个值,或者NULL(如果列允许NULL的话)。
特点
预定义值集:ENUM列只能包含一个从预定义值列表中选择的值
存储效率:MySQL在内部将ENUM值存储为整数索引(1-based),这使得存储非常紧凑
排序规则:ENUM值按照它们在定义时列出的顺序排序,而不是按字母顺序
空值和错误处理:
可以包含NULL(如果列允许NULL)
如果启用了严格SQL模式,尝试插入无效值会导致错误
在非严格模式下,无效值会被存储为特殊的空字符串(‘’)
如:
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
INSERT INTO shirts (name, size) VALUES ('dress shirt','large');
INSERT INTO shirts (name, size) VALUES ('t-shirt','medium');
INSERT INTO shirts (name, size) VALUES ('polo shirt','small');
优缺点
优点:
节省存储空间(特别是对于长字符串的有限选项)
确保数据完整性,只允许预定义的值
可读性好,查询和输出时显示字符串值
缺点:
修改ENUM值集需要ALTER TABLE操作
移植到其他数据库系统可能有问题
排序基于定义顺序而非字母顺序,可能不符合直觉
注意事项
ENUM列最多可包含65,535个不同的元素
在ENUM定义中,尾随空格会被自动删除
ENUM值在内部存储为整数,但在查询结果中显示为字符串
使用ENUM(‘yes’,‘no’)比VARCHAR(3)更高效,因为ENUM只占用1字节存储空间
浙公网安备 33010602011771号