MYSQL中 ENUM 类型的详细解释

ENUM

类型

ENUM

是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举。

在下列某些情况下,值也可以是空串(

""

) 或

NULL

  • 如果将一个无效值插入一个

     

    ENUM

    (即,一个不在允许值列表中的字符串),空字符串将作为一个特殊的错误值被插入。事实上,这个字符串有别于一个"普通的"空字符串,因为这个字符串有个数字索引值为 0。稍后有更详细描述。

  • 如果一个

     

    ENUM

    被声明为

    NULL

    NULL

    也是该列的一个合法值,并且该列的缺省值也将为

    NULL

    。如果一个

    ENUM

    被声明为

    NOT NULL

    ,该列的缺省值将是该列表所允许值的第一个成员。

 

每个枚举值均有一个索引值:

  • 在列说明中列表值所允许的成员值被从 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 个成员值。

从 MySQL 3.23.51 开始,当表被创建时,

ENUM

值尾部的空格将会自动删除。

当为一个

ENUM

列赋值时,字母的大小写是无关紧要的。然而,以后从列中检索出来的值的大小写却是匹配于创建表时所指定的允许值。

如果在一个数字语境中检索一个

ENUM

,列值的索引值将被返回。例如,你可以像这样使用数字值检索一个

ENUM

列:

mysql> SELECT enum_col+0 FROM tbl_name;

如果将一个数字存储到一个

ENUM

中,数字被当作为一个索引值,并且存储的值是该索引值所对应的枚举成员。(但是,这在

LOAD DATA

将不能工作,因为它视所有的输入均为字符串。) 在一个

ENUM

字符串中存储数字是不明智的,因为它可能会打乱思维。

ENUM

值依照列规格说明中的列表顺序进行排序。(换句话说,

ENUM

值依照它们的索引号排序。)举例来说,对于

ENUM("a", "b")

"a"

排在

"b"

后,但是对于

ENUM("b", "a")

"b"

却排在

"a"

之前。空字符串排在非空字符串前,

NULL

值排在其它所有的枚举值前。为了防止意想不到的结果,建议依照字母的顺序定义

ENUM

列表。也可以通过使用

GROUP BY CONCAT(col)

来确定该以字母顺序排序而不是以索引值。

如果希望得到一个

ENUM

列的所有可能值,可以使用

SHOW COLUMNS FROM table_name LIKE enum_colum

转载于:https://www.cnblogs.com/voswin/articles/1497326.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLenum类型是一种用于定义列的数据类型,它允许我们在列指定一组预定义的值。MySQLenum类型实际上存储的是数字,占用1到2个字节,可表示的数字范围是0-65535。而有效值是从1开始计数,例如,插入一个字符串值'刘备'相当于插入了1。MySQLenum类型支持字符串和数字操作,当存储字符串时,MySQL会自动将其翻译成数字进行存储,当存储数字时,MySQL则直接插入。而在读取数据时,MySQL会自动将其转换为字符串输出。在非严格模式下,MySQL还允许插入数字0或空字符串'',但建议开启MySQL的严格模式。此外,在对枚举列进行排序时,MySQL会按照其数字形式进行排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mysql:列类型enum、set](https://blog.csdn.net/u010476739/article/details/122996348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [实例测试MySQLenum类型](https://download.csdn.net/download/weixin_38522106/12826096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值