zoukankan      html  css  js  c++  java
  • mysql中enum的用法

     

     

    字段类型文档长度/值*1整理属性Null默认2额外注释
    enum        

    说明:enum类型的字段,若长度值写长度1/2,报错

    (1)  数据长度为1,则为0,1,2…

    (2)  数据长度为2,则为00,01,02…

    长度值:表示的值,而不是值得长度

    1.    数据长度为1,长度值‘0’,‘1’,‘2’

    2. 数据长度为2,长度值‘00’,‘01’,‘02’

    alter table test_enum change is_flag  is_flag enum('0','1')

    注意:如果你的系统中真的已经使用了mysql的enum字段类型,请在查询的时候直接查询值(并加上单引号),这样就不会使用enum自身隐藏的索引值来获取结果了。【顺便说一下,enum的默认索引是从NULL开始,如果你允许NULL并default NULL】

    之所以提起这个,是在用shopnc系统的时候发现大量这样的字段,让人非常郁闷,几乎没有办法优化(如果是纯数值型,还是建议采用tinyint 字段吧,毕竟它也只占一个字节,即使出现赃数据,也可以被接受,不象enum,如果纯数字型范围,更改了索引,你就不知道你查询的值是否正确了)

    建议:

    如果字段是字符串,并且长度固定,可以尝试用char如果是数值型,还是用tinyint吧,比较安全稳定,而且即使迁移,问题也不大。

    MYSQL中 ENUM 类型的详细解释

    ENUM 类型

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

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

    • 如果将一个无效值插入一个 ENUM (即,一个不在允许值列表中的字符串),空字符串将作为一个特殊的错误值被插入。事实上,这个字符串有别于一个"普通的"空字符串,因为这个字符串有个数字索引值为 0。稍后有更详细描述。
    • 如果一个 ENUM 被声明为 NULLNULL 也是该列的一个合法值,并且该列的缺省值也将为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

     

  • 相关阅读:
    java程序运行时内存分配详解 (转)
    android命令安装apk时报错:INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
    android中的命令安装与卸载
    遇到问题的态度
    java中的Robot
    Python中*args 和**kwargs作为形参和实参时的功能详解
    python使用selenium执行JS快速完成超长字符串的输入
    python中多模块导入的注意点
    Python中的GIL锁
    不用下载Axure RP Extension for Chrome插件查看原型文件的方法
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4831702.html
Copyright © 2011-2022 走看看