慎使用sql的enum字段类型

  在sql的优化中,会有同学提到一点:使用enum字段类型,代替其他tinyint等类型。以前这也是不少人喜欢优化的,但是现在细想,是非常不合理的。

  优点:

  1.可以设置区间范围,比如设置性别:1男2女3未知。如果这是出现一个非1、2、3类型的,一眼就是脏数据了。

  缺点:

  1.数据迁移的时候,他几乎不可能被其他数据库所支持,如果enum里面是字符串,对于其他数据库来说就更郁闷了,还不能设为tinyint等类型的字段(enum虽然可以存储字符串,但对于内部来说,还是以顺序进行索引,比如'a','b','c',我们也可以用索引值来获取值select * from tbl_name whre enum = 2,这与select * from tbl_name where enum = 'b'等义)如果你看明白了这两句SQL为什么等义,那么你也就可以了解为什么不主张用enum字段了。

  2.如果一个设计不合理的ENUM字段,比如一个enum字段的范围是('0','1','2','3'),这时候,你会不会哭呢?要知道enum的枚举值对应的索引是从1开始的。比如:执行INSERT INTO test1(id, sex) VALUES (1, 1);表中实际存储你就会发现,你插入的并不是1,而是0。

  3.更有甚者,由于enum的区间也是可以变动的,如果你在enum的枚举字段范围中加一个值,并且不是加在最后,那么也就相当于,你把原来的范围都改变了索引值,试想这又是多么一个恐怖的事情?

  

  总结:

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

  建议:

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

 

如有错误,欢迎热心指正。

  

 

转载于:https://www.cnblogs.com/luoliuniankk/p/9763880.html

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

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

相关文章

js对HTML字符转义与反转义

注意&#xff1a; 在编写html时&#xff0c;经常需要转义&#xff0c;才能正常显示在页面上。 并且&#xff0c;还可以防止xss。 解决方案&#xff1a; 一&#xff0c; 使用正则&#xff1a; 使用正则转码&#xff1a; var value document.getElementById(input).value.t…

python三维数据图_matplotlib中三维数据的热图

我想用我的三维数据生成一张热图。在我已经能够用这些数据绘制出trisurf。在有人能帮我制作热图吗&#xff1f;我看到了在线教程&#xff0c;但是它们对3D来说都很复杂&#xff0c;我在这个网站上找到了一个在matplotlib中生成带有散点的热图&#xff0c;但是它只有2D数据。在我…

区分基于Ant目标的Gradle任务

在我的博客文章《 从Ant Build演变Gradle构建&#xff1a;导入Ant构建文件》中 &#xff0c;我演示了如何使用Gradle内置的基于AntBuilder的Ant支持在Gradle构建中导入Ant目标。 然后&#xff0c;可以将这些Ant目标作为Gradle任务进行访问&#xff0c;并与Gradle构建直接引入的…

java显示长度和第一个字符_从Java字符串中以长度1的字符串返回的第一个字母的最佳方法是什么?...

假设以下内容&#xff1a;String example "something";String firstLetter "";以下分配方式firstLetter可能会影响性能&#xff0c;请注意是否存在差异&#xff1b; 哪个最好&#xff0c;为什么&#xff1f;firstLetter String.valueOf(example.charAt(…

sequelize difference between hasone and hasmany

Query is equal, hasone return the first instance from the collection,hasmany return the whole collection. 转载于:https://www.cnblogs.com/ybleeho/p/9772902.html

localStorage封装借口store.js的使用

localstorage是 HTML5 提供的在客户端存储数据的新方法&#xff0c;主要作用是将数据保存在客户端中&#xff0c;并且数据是永久保存的&#xff0c;除非人为干预删除。localstorage 的局限 1、只有版本较高的浏览器中才支持 localstorage2、localStorage的值的类型限定为strin…

AmazonSQS和Spring用于消息传递队列

下一篇文章将演示如何将Spring JMS模板和DLMC与AmazonSQS API一起使用&#xff0c;以放置消息队列。 我为什么要使用Amazon SQS&#xff1f; 易于配置 跨平台支持 从您的自我冗余&#xff0c;连带和扩展方面的烦恼中赚钱。 为什么我不使用Amazon SQS&#xff1f; 如果延迟…

3.3-3.9 周记

3.3-3.10 1. NIM游戏 百度链接&#xff1a;https://baike.baidu.com/item/Nim%E6%B8%B8%E6%88%8F/6737105?fraladdin 定义&#xff1a; P局面&#xff1a;先手必败N局面&#xff1a;先手必胜P局面的所有子局面都是N局面。N局面的子局面中必有一个是P局面 性质&#xff1a;\(a_…

关于类的使用的几个关键

类的定义和声明必须放在main函数前 如果类中只有申明类而没有定义&#xff0c;则只能定义指针&#xff1a;Test *test&#xff1b;如果不定义类而仅仅声明类的话&#xff0c;当使用Test test时&#xff0c;编译器只知道Test是个class&#xff0c;但留多大空间&#xff1f;怎么初…

java判断对象已死_Java的JVM判断对象已死的基本算法分析

jvm中有各种的垃圾收集器&#xff0c;每个收集器都有各自的算法。但是一切的根本都需要找到找到应该被消除的对象&#xff0c;理解如何找到死亡对象才是理解垃圾收集器的基础。01两个基本算法a、引用记数法&#xff1a;对象中加一个引用计数器&#xff0c;每次被引用计数器加一…

Java开发中更多常见的危险信号

在《 Java开发中的常见危险信号》一文中&#xff0c;我研究了一些不一定本身就是错误或不正确的做法&#xff0c;但它们可能表明存在更大的问题。 这些“红色标记”类似于“代码气味”的概念&#xff0c;我在这篇文章中引用的某些特定“红色标记”被称为“代码气味”。 正如我在…

python平均分由高到低顺序排列输出选手编号和最后得分_python 字典的使用案例二:求平均分,并按平均分由高到低输出选手编号和最后得分...

校园好声音大赛&#xff0c;三位选手得分&#xff0c;由8位评委给出。请根据评分表&#xff0c;将每们选手的得分去掉一个最高分和一个最低分后求平均分&#xff0c;并按照平均分由高到低输出选手编号和最后得分。dicScores {012: [90, 94, 97, 86, 85, 89, 88, 85], 005: [91…

java开发 职业技能_java编程开发程序员需要具备哪些职业技能

随着互联网的不断发展&#xff0c;java编程开发可以说是目前学习人数和应用范围非常多的一种编程语言了&#xff0c;而今天我们就一起来了解一下&#xff0c;java编程开发程序员需要具备哪些职业技能。1、数据结构和算法分析数据结构和算法分析&#xff0c;对于一名程序员来说&…

Django model转字典的几种方法

平常的开发过程中不免遇到需要把model转成字典的需求&#xff0c;尤其是现在流行前后端分离架构&#xff0c;Json格式几乎成了前后端之间数据交换的标准&#xff0c;这种model转dict的需求就更多了&#xff0c;本文介绍几种日常使用的方法以供参考&#xff0c;所有例子均基于Dj…

微信小程序日历课表

最近项目中使用到了日历&#xff0c;在网上找了一些参考&#xff0c;自己改改,先看效果图 wxml <view class"date"><image class"direction" src"/images/icon/left.png" bindtapminusMouth/><label>{{year}}年{{mouth}}月<…

Java:将条件移至消息文件

Java类ResourceBundle和MessageFormat提供了一个很好的工具集&#xff0c;用于解决Java应用程序内部的本地化消息。 这篇文章提供了一个小示例&#xff0c;说明如何使用ChoiceFormat将与消息相关的简单条件从Java代码移动到消息文件中。 如果您已经知道ChoiceFormat我认为您不会…

【LuoguP3241】[HNOI2015] 开店

题目链接 题意 给出一棵边带权的树&#xff0c;多次在线询问一个点到一个区间内的点的距离和。 Sol 分块过不了的 一个 trick &#xff0c;都知道要算两点之间距离可以拆成到根的距离和他们的 LCA 到根的距离 &#xff0c;其实要算多个点到一个点距离也可以使用一个类似的 tric…

windows中的项目拷贝到linux中,部分数据不显示的原因

linux严格区分大小写&#xff0c;可能是数据表名大小写导致的。 如上传文件不成功&#xff0c;可能是系统权限导致的。转载于:https://www.cnblogs.com/miaoxingren/p/9784743.html

java并发数据共享机制_Java并发编程:核心理论之数据共享性

原标题&#xff1a;Java并发编程&#xff1a;核心理论之数据共享性并发编程是Java程序员最重要的技能之一&#xff0c;也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解&#xff0c;同时要求编程者逻辑清晰、思维缜密&#xff0c;这样才能写出高效、…

调用天气预报接口

方案一&#xff1a; 浏览器由于安全的限制&#xff0c;不允许跨域访问。但是PHP服务器是允许的。我们可以通过使用PHP文件做代理&#xff0c;通过PHP来调用接口。 详细接口分析可参看&#xff1a;http://www.cnblogs.com/wangjingblogs/p/3192953.html 返回JSON格式 PHP代码…