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

转载于:https://www.cnblogs.com/skillCoding/archive/2012/03/14/2395404.html

MYSQL中 ENUM 类型相关推荐

  1. mysql中enum类型

    ENUM类型 ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串("") 或 NULL: 如果 ...

  2. MySQL中enum的用法

    ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用. 为什么使用枚举 限定值的取值范围,比如性别(男,女,未知)等. CREATE TABLE `size`(`sex` enum(' ...

  3. MYSQL中TIMESTAMP类型的默认值

    MYSQL中TIMESTAMP类型的默认值    MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: ---------- ...

  4. python mysql写入速度加快_解决python写入mysql中datetime类型遇到的问题

    解决python写入mysql中datetime类型遇到的问题 发布时间:2020-08-31 16:46:47 来源:脚本之家 阅读:89 作者:WilliamDescant 刚开始使用python ...

  5. python mysql驱动写入datetime类型的数据_解决python写入mysql中datetime类型遇到的问题...

    刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于存储记录的日期时间值.python程序中有对应的一个dateti ...

  6. php枚举mysql,小技巧:取得MYSQL中ENUM(枚举)列的全部可能值。-PHP教程,PHP应用...

    取得mysql中enum(枚举)列的全部可能值 这里其实并不需要其它的什么函数来支持,只需要使用mysql提供的一些sql语句就可以了. 这里为了简单起见,以mysql的系统表user为例,取出sel ...

  7. MySql中json类型的使用___mybatis存取mysql中的json

    MySql中json类型的使用 MySQL从5.7.8起开始支持JSON字段,这极大的丰富了MySQL的数据类型.也方便了广大开发人员.但MySQL并没有提供对JSON对象中的字段进行索引的功能,至少 ...

  8. mysql java 获取周_Java中获取Mysql中datetime类型的数据

    由于Java中的日期类型只有Date类型,而Mysql中即有date型,又有datetime型,当我们想要在java中获取Mysql中datetime类型的数据或向Mysql数据库中插入datetim ...

  9. mysql中Long类型日期比较大小

    项目里遇到一个功能,需要查出表中,昨天一天某个人的考勤记录. 问题本不复杂,但是表中用户打卡时间为char类型的时间戳(毫秒).这样一来比较时间范围就麻烦了许多. 还好,网上以为有脾气的博主写的文章帮 ...

最新文章

  1. Java中New一个对象是个怎么样的过程?
  2. 考研预报名一直显示服务器错误,2021考研预报名 | 往年预报名出错的同学,问题出在这里!...
  3. in python_数学 in python
  4. golang基本数据类型string字符串常用方法代码示例
  5. python3中urlopen_解决python3 urllib中urlopen报错的问题
  6. Spring Boot文档阅读比较-@SpringBootApplication Auto Configuration
  7. rust 官服指令_【RUST】每个RUST玩家都需要的十个指令
  8. html 自定义属性_五道自测题-你我都应知道的HTML小知识
  9. 宋宝华: 一图理解终端、会话、 进程组、进程关系
  10. [WP8.1UI控件编程]Windows Phone XAML页面的编译
  11. 【C语言】17-预处理指令3-文件包含
  12. MacBook Pro 2017 13寸版 触摸板windows驱动开发(开发HID鼠标键盘驱动之一)
  13. 合并时显示是无效的m3u8文件_如何合并m3u8及ts文件
  14. android小米卸载app,MIUI系统软件卸载工具
  15. java int 转 object_在java上将int转换为Object
  16. wrk服务器性能测试
  17. 百分之99的人都不知道的Python爆破ZIP文件
  18. RGB-D SLAM in Dynamic Environments Using Static Point Weighting论文笔记
  19. pubwin操作记录
  20. 车内静谧性超越埃尔法?走进腾势D9身价上亿的NVH实验室

热门文章

  1. ASP.NET 购物车
  2. sqlserver中判断表或临时表是否存在
  3. MxGraph从入门到精通之2:HelloWorld程序解析
  4. Open vSwitch VLAN相关字段详解(dl_vlan、dl_vlan_pcp、vlan_vid、vlan_pcp、vlan_tci)
  5. Centos netperf安装
  6. leetcode算法题--滑动窗口的最大值
  7. linux虚拟网络设备--内核网桥的实现分析(六)
  8. leetcode算法题--整数拆分
  9. python调用gitlab api自动合并分支_Python3 如何使用 GitLab API 进行批量的合并分支
  10. [PAL编程规范]SAP HANA PAL多项式回归预测分析Polynomial Regression编程规范FORECASTWITHPOLYNOMIALR(预测)...