MySQL中的ENUM类型
ENUM是MySQL中的一种字符串对象类型,用于存储一组预定义的值。它允许你在列中只能存储指定的值列表中的一个值,或者NULL(如果列允许NULL的话)。
基本语法
CREATE TABLE table_name (
column_name ENUM('value1', 'value2', 'value3', ...)
);
特点
- 预定义值集: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字节存储空间
ENUM类型适合用于具有有限且固定选项的字段,如状态、类型、性别等。
1344

被折叠的 条评论
为什么被折叠?



