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

posted on 2009-06-05 23:07  睿达团队  阅读(1166)  评论(0)    收藏  举报