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字节存储空间

posted @ 2025-08-11 15:25  休玛  阅读(78)  评论(0)    收藏  举报