MySQL数据库中关于ENUM类型的详细解释


  本文标签:MySQL数据库 ENUM类型

  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")的一个列,可以有下面所显示的任一值  。每个值的索引值也如下所示:值索引值 NULLNULL""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来实现  。

  关于MySQL数据库ENUM类型的知识就介绍到这里了,如果您想了解更多MySQL数据库的知识,可以看一下这里的文章:http://database.51cto.com/mysql/,相信一定可以给您带来收获的  。