前言:在网上看了很多文章,大家都是推荐 MySQL 要慎用 ENUM 字段,但是原理感觉还是有点模糊。今天我们就从官网来818这些东西

1、关于 ENUM 迁移的问题?

这里引用别人的一段话:但ENUM带来的问题也不少,比如数据迁移的时候,他几乎不可能被其他数据库所支持,如果 ENUM 里面是字符串,对于其他数据库来说就更郁闷了,还不能设为tinyint等类型的字段

2、关于 ENUM 索引的问题?

纯数字类型的不建议用枚举类型,这是因为在 ENUM 内部维护有一个隐形的索引,也是按数字排列的,容易混淆;添加枚举值也是一个问题,如果添加在最后还好,如果添加在中间什么位置的话,原来的隐藏索引将不再起作用

Index Values for Enumeration Literals

Each enumeration value has an index:

The elements listed in the column specification are assigned index numbers, beginning with 1.

The index value of the empty string error value is 0. This means that you can use the following SELECT statement to find rows into which invalid ENUM values were assigned:

mysql> SELECT * FROM tbl_name WHERE enum_col=0;

The index of the NULL value is NULL.

The term “index” here refers to a position within the list of enumeration values. It has nothing to do with table indexes.

For example, a column specified as ENUM('Mercury', 'Venus', 'Earth') can have any of the values shown here. The index of each value is also shown.

ValueIndex

NULLNULL

''0

'Mercury'1

'Venus'2

'Earth'3

An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.) A table can have no more than 255 unique element list definitions among its ENUM and SET columns considered as a group. For more information on these limits, see Section C.10.5, “Limits Imposed by .frm File Structure”.

If you retrieve an ENUM value in a numeric context, the column value's index is returned. For example, you can retrieve numeric values from an ENUM column like this:

mysql> SELECT enum_col+0 FROM tbl_name;

Functions such as SUM() or AVG() that expect a numeric argument cast the argument to a number if necessary. For ENUM values, the index number is used in the calculation.

3、ENUM 字段 NULL 值问题

ENUM 字段默认是可以插入 NULL 值的,这个就比较尴尬了,而且没有办法优化

4、插入的值问题

如果插入的值比ENUM设定的值大,会默认保存成接近的那个值;插入的值不能包含函数,不能传递参数

numbers ENUM('0','1','2')

mysql> INSERT INTO t (numbers) VALUES(2),('2'),('3');

mysql> SELECT * FROM t;

+---------+

| numbers |

+---------+

| 1 |

| 2 |

| 2 |

+---------+

所以如果插入的值是数字型的,建议用tinyint,如果插入的值是字符型的,建议用char。如果真想用 ENUM 也是可以得,前提是要了解到 ENUM 的弊端,就可以有效规避这些问题

参考文档:https://dev.mysql.com/doc/refman/5.7/en/enum.html#enum-limits

为了方便大家交流,本人开通了微信公众号,和QQ群291519319。喜欢技术的一起来交流吧

mysql 5.7 enum_MySQL慎用 ENUM 字段相关推荐

  1. mysql 禁止使用enum_MySQL慎用 ENUM 字段

    前言:在网上看了很多文章,大家都是推荐 MySQL 要慎用 ENUM 字段,但是原理感觉还是有点模糊.今天我们就从官网来818这些东西 1.关于 ENUM 迁移的问题? 这里引用别人的一段话:但ENU ...

  2. mysql 5.7 enum_MYSQL中 ENUM 类型的详细解释

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

  3. 为嘛子要慎用mysql的enum字段?(来自向东的原创博客)

    背景:时下都流行enum类型的使用tinyint,那enum就真没有用的价值了么? PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点: 膘哥观点: ...

  4. mysql数据库enum部分乱码_要慎用mysql的enum字段的原因

    PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点: 膘哥观点: enum有优点.但个人觉得...缺点更多,客观的讲:优点主要是在建数据 库的时候就 ...

  5. mysql 禁止使用enum_要慎用mysql的enum字段的原因

    PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点: 膘哥观点: enum有优点.但个人觉得...缺点更多,客观的讲:优点主要是在建数据 库的时候就 ...

  6. enum 中文 mysql_要慎用mysql的enum字段的原因_MySQL

    PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点: 膘哥观点: enum有优点.但个人觉得...缺点更多,客观的讲:优点主要是在建数据 库的时候就 ...

  7. Java、Mysql、MyBatis 中枚举 enum 的使用

    From: https://yulaiz.com/java-mysql-enum/ Java 和 MySql 中都有枚举的概念,合理的使用枚举,可以让代码阅读和数据库数据查询更加直观.高效.那么我们怎 ...

  8. MySQL 中的 SET 与 ENUM 类型使用详解

    一.SET类型 在创建表时,就指定SET类型的取值范围. [sql] view plaincopy 属性名 SET('值1','值2','值3'...,'值n') 其中,"属性名" ...

  9. mysql 枚举_详解MySQL数据类型之枚举类型ENUM的用法

    本节主要内容: MySQL数据类型之枚举类型ENUM MySQL数据库提供针对字符串存储的一种特殊数据类型:枚举类型ENUM,这种数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧 ...

最新文章

  1. uint8_t uint16_t uint32_t uint64_t 解析
  2. 【案例】城市地址三级联动
  3. SAP PM单一和复合角色
  4. 《数学之美》第31章 大数据的威力--谈谈数据的重要性
  5. 抢占大数据产业发展先机
  6. 最新|TensorFlow开源的序列到序列框架
  7. 单载波调制和OFDM调制比较
  8. linux与windows间共享文件夹 FileZilla树莓派文件传输
  9. 出现 java.lang.NullPointerException 的几种原因、可能情况
  10. STL源码学习之空间配置
  11. Dinic最大流(bzoj 2756: [SCOI2012]奇怪的游戏)
  12. 如何用编程方式实现创建一个页面并替换掉站点首页
  13. jmeter 线程执行顺序_JMeter基础之--元件的作用域与执行顺序
  14. 并发编程学习之ForkJoinPool分支合并
  15. quartusII编译时出现Error (119013): Current license file does not support the EP4CE6F17C8 device
  16. Ajax入门教程(内附源码实例)
  17. 编译原理生成语法树c语言,编译原理
  18. shell脚本使用两个横杠接收外部参数
  19. 今天520,爱他就给他个家。
  20. Mac 卸载/安装 maven

热门文章

  1. 讲解几点关于Locallapstore怎么用的方法概论
  2. 不分类工具:sd卡格式化工具安装教程
  3. 安装虚拟环境的报错和解决
  4. Java多线程 关闭线程池 shutdown() 、shutdownNow()、awaitTermination()
  5. HTML 17 HTML 全局属性
  6. 平板个人计算机的品牌和配置,比较热销十大平板电脑排行榜
  7. python的变量对大小写并不敏感_Python变量不区分大小写
  8. Unity3d学习笔记-无限循环滚动背景(完整的商店广告牌组件)
  9. 局域网即时通讯软件_什么样的企业即时通讯软件好用?应该如何选择?
  10. 携号转网之后如何通过号段判断手机号码的运营商?