mysql 禁止使用enum_MySQL慎用 ENUM 字段

前言:在网上看了很多文章,大家都是推荐 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。喜欢技术的一起来交流吧

0818b9ca8b590ca3270a3433284dd417.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019年雁栖湖会议重大科学问题面向全球发布

来源:中国科学杂志社10月13日,由中国科学院学部和北京市政府联合举办的2019年度雁栖湖会议在北京怀柔开幕。中国科学院副院长张亚平、北京市委副秘书长郑登文以及来自国内外免疫学领域的院士、著名专家学者和中国科学院大学、中国科学院微生物所的师生等…

vscode怎么安装python包_vscode如何安装python

vscode安装python的方法: 1、在vscode的扩展中输入"ext install python"安装python插件打开VScode,Ctrlp 输入 "ext install python",搜索时间可能会比较长 安装过程不能停止,否则重新安装;2、在配…

mysql关于日期的函数_MySQL中关于日期函数汇总

实际应用SELECT NOW(),DATE_FORMAT(NOW(),%Y-%m-%d) %Y-%m-%d;年月日时间模块小时分钟秒周%X 年,其中的星期日是周的第一天,4 位,与 %V 使用%x 年,其中的星期一是周的第一天,4 位,与 %v 使用%Y 年&#xff…

《 百度大脑AI技术成果白皮书》,介绍百度大脑5.0,附48页PDF下载

来源:专知【导读】百度大脑是百度AI集大成者,自2010年起开始积累基础能力,2019年升级为5.0,成为软硬件一体的AI大生产平台。百度发布《 百度大脑AI技术成果白皮书》,详细介绍了百度大脑5.0在基础层、感知层、认知层、平…

AT91SAM9260EK-38k产生原理

9260内部有5个内部计数器&#xff0c;分别为TIMER_CLOCK1 --- TIMER_CLOCK5。通过这5个时钟可以为各种内部设备提供时钟基准。 其中&#xff0c;红外发射38K方波&#xff0c;是通过CLOCK1计数产生。 配置寄存器如下 //选择TC通道 __sys_reg(AT91_PMC_PCER) 1 <<…

telegraf输出MySQL_Grafana+influxdb+telegraf初探-快速监控主机与mysql

一、安装1.1、配置influxdb yum源[rootnode ~]# cat /etc/yum.repos.d/influxdb.repo[influxdb]name InfluxDB Repository - RHEL \$releaseverbaseurl https://repos.influxdata.com/rhel/\$releasever/\$basearch/stableenabled 1gpgcheck 1gpgkey https://repos.influx…

新能源汽车产业深度研究报告:从2.0迈入3.0时代(113页)

来源&#xff1a;华西证券1.现状&#xff1a;发展节奏加快 电动化趋势明朗1.1.全球&#xff1a;新能源汽车加速渗透 中国占比持续提升 全球新能源汽车销量保持高速增长&#xff0c;十年 CAGR 达 99.4%。2008年新能源汽车 销量仅有 0.5 万辆&#xff0c;2011 年增至 4.9 万辆&am…

linux清除configure文件_在Linux操作系统下自动生成Makefile的方法

在Linux操作系统下进行开发&#xff0c;编写Makefile似乎是不可缺少的事情。但是对于一个比较大的工程&#xff0c;编写一个符合规范的Makefile并非易事。而且由于Makefile的各种显式&#xff0c;隐式规则&#xff0c;加之平时并不经常编写Makefile&#xff0c;导致我们写一个M…

mysql工作台安装使用_如何安装MySQL工作台?

问题描述在10.04或10.10上安装MySQL工作台不是问题&#xff0c;因为deb软件包可以在MySQL的网站上找到。但是没有11.04 deb包。那么&#xff0c;如何在11.04上安装MySQL工作台并在通过apt-get update向ubuntu提供更新时自动更新它。最佳解决办法从MySQL Workbench downloads页面…

华为轮值董事长郭平:打造VR/AR信息高速公路,支撑产业繁荣

来源&#xff1a;华为10月19日&#xff0c;以“VR让世界更精彩——VR5G开启感知新时代”为主题的2019世界VR产业大会在江西省南昌市举行。华为轮值董事长郭平发表了《打造VR/AR 信息高速公路&#xff0c;支撑产业繁荣》的主题演讲。郭平认为&#xff1a;VR/AR将成为5G时代的首批…

使用Ping命令解析主机名解析出来的是IPv6

如果你经常使用ping命令&#xff0c;并身处局域网&#xff0c;那么你肯定会有这样一个疑问&#xff1a;Ping计算机名为何是IPv6地址&#xff1f;问这个问题的人很少见&#xff0c;大多都是对网络知识稍有了解的人&#xff0c;所以才会闻到关于ping的问题&#xff0c;而且在这之…

cstring判断包含字符串_作为java程序员要知道的大厂常见的算法面试题:字符串的包含...

1.2 字符串的包含题目描述给定一长字符串a和一短字符串b。请问&#xff0c;如何最快地判断出短字符串b中的所有字符是否都在长字符串a中&#xff1f;请编写函数bool StringContain(string &a, string &b)实现此功能。为简单起见&#xff0c;假设输入的字符串只包含大写…

数字双胞胎技术和物联网如何帮助企业取得成功

来源&#xff1a;物联之家网&#xff08;iothome.com&#xff09;到2023年&#xff0c;全球数字双胞胎市场预计将达到150亿美元&#xff0c;2017年至2023年的复合年增长率&#xff08;CAGR&#xff09;为37&#xff05;。通用电气、IBM和微软等主要公司正在使用数字双胞胎技术来…

武汉凭什么被列为国家超大城市?

2014年11月&#xff0c;国务院发布国发2014第51号文件《关于调整城市规模划分标准的通知》&#xff0c;新标准将城市划分为五类七档&#xff0c;其中规定&#xff1a;城区常住人口1000万人以上的城市为超大城市。 根据该标准&#xff0c;此前北京、上海、天津、重庆、广州、深圳…

sql中排序序号_SQL 和 SPL 的有序运算对比

【摘要】 有序运算是指按照一定的次序对有序集合的成员进行计算。SQL 和 SPL 是大家比较熟悉的程序语言&#xff0c;本文将探讨对于有序运算问题&#xff0c;这两种语言的解决方案和基本原理。如何简便快捷的处理有序运算&#xff0c;这里为你全程解析&#xff0c;并提供 SQL 和…

前方高能!AI 大牛 LeCun 设想下一个新前沿:摈弃深度学习的所有概率技巧,改而掌握不断转变的能量值...

来源&#xff1a;云头条据深度学习界的领军人物Yann LeCun声称&#xff0c;AI的下一个发展阶段可能是摈弃深度学习的所有概率技巧&#xff0c;改而掌握不断转变的能量值。据说工程师&#xff08;以及一些科学家&#xff0c;但以工程师为主&#xff09;早在坐到板凳上搞设计之前…

2019年中国智能制造发展现状及趋势分析报告

来源&#xff1a;前瞻产业研究院未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网…

元学习—Meta Learning的兴起

来源&#xff1a;专知【导读】元学习描述了训练深度神经网络相关的更高级别的元素。在深度学习文献中&#xff0c;“元学习”一词经常表示神经网络架构的自动化设计&#xff0c;经常引用“ AutoML”&#xff0c;“少量学习”或“神经架构搜索”。OpenAI的魔方机器人手的成功源于…

python3 rid1.7.4.2 控制台中文乱码_TL;DR - 有关 Python 2 和 Sublime Text 中文 Unicode 编码问题的分析与理解...

TL;DR 问题背景&#xff1a; 相信很多用 Sublime Text 来写 Python 2 的同学都遇到过以下这个问题&#xff08;例如这位同学 /t/100435 和这位同学/t/163012 &#xff09;&#xff1a; 在 Sublime Text 里用 Cmd (Ctrl) B 运行代码 print u中文&#xff0c;想要打印出 unicode…

服务器行业深度解析:服务器未来需求知多少

来源&#xff1a;国盛证券一、 全球公有云加速渗透叠加企业上云大趋势来临1. 全球云领军收入增速维持高位&#xff0c;Q2 CAPEX 出现恢复信号全球云计算进入甜蜜点&#xff0c;IaaS 市场主导增长。1&#xff09;2017 年 6 月&#xff0c;Morgan Stanley 认为全球云计算行业进入…