要慎用mysql的enum字段的原因

要慎用mysql的enum字段的原因

PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点:

膘哥观点:
    enum有优点。但个人觉得。。。缺点更多,客观的讲:优点主要是在建数据 库的时候就可以把一些值给规范好。缺点是。。enum不适合PHP。主要是PHP是弱类型,如:你insert into ….. set a= 1,你没法知道你是想 a= ‘1’ 还是 a= 1(a=’1’是插入值1,a=1是插入enum的第一个值,尤其php弱类型的,如果int的,很少有人在sql里加双引号。),这是PHP和 mysql 在使用enum 最大的问题。所以。。安心点啦。干脆点直接tinyint。

单曲观点:
    我觉得没什么优点,对数字型的enum,简直就是梦魇,boolean  tinyint(1) 0,1 status  tinyint(1)  1,2,3,4,5,6..tinyint欢淫你~~。如:audit_result enum(1,2,3),set audit_result = 1;…容易出现膘哥所说的混淆。

简单观点:
   少用,一般都是用tinyint替代。

天枫观点:
   我觉得除了状态直观  没什么优点,我一般直接int,tinyint([1or2or3]) 到底有啥区别?(后面会简单探讨下,这里面的1or2or3区别。)

中庸观点:
   a=1是插入enum的第一个值,尤其php弱类型的,如果int的,很少有人在sql里加双引号,基本上是不加引号的。

竖琴螺观点:
   六种情况就:tinyint(1)  -1,-2,1,2,3,4

上面各种观点重点集中在PHP这种弱类型语言对引号不重视,程序员不写容易引起插入的语句不是自己想要的结果的问题,容易出现int时没有用引号导致插入了新值而不是定的那个值:

表结构如下: 

1
2
3
4
5
CREATE TABLE `enum2tinyint` (
 `switchs` enum('none','success','fail','delete','skip','1') DEFAULT NULL,
 `switch` tinyint(1) NOT NULL,
 KEY `switchs` (`switchs`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 
正常带引号插入enum: 

1
2
INSERT INTO `test`.`enum2tinyint` (`switchs`, `switch`) VALUES ('1', '1');
1 1

PHP的弱类型问题,特别是对int类型的情况,实践如下: 
如果没有带引号插入enum字段后如下(是第一个值none): 

1
2
INSERT INTO `test`.`enum2tinyint` (`switchs`, `switch`) VALUES (1, '1');
none 1

如果没有带引号插入enum字段后如下(是第2个值success): 

1
2
INSERT INTO `test`.`enum2tinyint` (`switchs`, `switch`) VALUES (2, '1');
success 1

结论:要插入enum的值,字段必须加引号,不加引号当然是数字,数字就是key,不是value。

规劝:
1)enum是整型这样的错误很容易发生,尤其是php弱类型的,一般新来一个人,没注意enum类型,就会犯错。
2)数据库说明清楚的话,或者可选择的全是字符串的话,还没什么,但是里面有数字,难免有新手犯错,养成加引号的习惯很重要。

最终结论:
历史原因,要把enum改成tinyint程序改动太大了,用了的没必要改·~,以后新建的时候,尽量使用tinyint就好。
这种字段的重复内容过多的,索引建不建,关系不大,这种在mysql叫索引的势太低,其查询效果不太好

 

https://www.cnblogs.com/-mrl/p/5096447.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101363.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JVM调优工具「建议收藏」

    JVM调优工具「建议收藏」JVM调优工具Jconsole:jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。JProfiler:商业软件,需要付费。功能强大。VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。如何调优观察内存释放情况、集合类检查、对象树上面这些调优工具都提供了强大的功能,但是总的来说一般分为以下几类功能堆信息查…

    2022年6月1日
    30
  • 交易真的能稳定盈利吗_如何在股市稳定盈利

    交易真的能稳定盈利吗_如何在股市稳定盈利作为一个已经稳定盈利的人,我来解答下吧。我主要做外汇,期货和期权,A股也做,但是中国的股票你们知道的,做空的限制太多,融券融不到,股指期货还限制开仓和提高杠杆率。所以要等一个轮回需要5年以上,所以股票等待建仓机会比较漫长。从交易者的层面来看,我一般把他们分为这么几类人:一,幼儿园阶段:无知者无畏这种人没做过交易,只是从朋友那里听说,交易能赚大钱,或者是书刊杂志上读了一些交易大师的成功学传记,然后就跟打了鸡血似的,觉得自己也能和他们一样在金融市场赚到很多钱,这些人没有风控意识,甚至感觉这个市场

    2022年10月4日
    2
  • 怎么将多个ppt合并到一个ppt上_如何合并多个ppt文件

    怎么将多个ppt合并到一个ppt上_如何合并多个ppt文件在一个文件夹下面有a.ppt,b.ppt,c.ppt等PPT文件,如果把它们合并到一个新的PPT中?当PPT文件数量比较少的时候,我们还可以一个个打开,复制所有的幻灯片到新建的PPT中。当文件数量达

    2022年8月5日
    5
  • #ZipLib可以用于闭源软件

    #ZipLib可以用于闭源软件一直对各开源协议理解得不够透彻,对#ZipLib说的这段话:[quote]helibraryisreleasedundertheGPLwiththefollowingexception:Linkingthislibrarystaticallyordynamicallywithothermodulesismakingacombin…

    2022年7月26日
    7
  • 云服务器和虚拟主机有哪些区别

    云服务器和虚拟主机有哪些区别虚机主机就是利用技术把一台服务器分成多个“虚拟”的主机,这些划分出来的主机具有独立的域名,和具有完整的Internet服务器功能,划分出来的虚拟主机共享服务器的宽带和IP。虚机主机之所以使用率较高,是因为相对于购买服务器和租用专线的费用,虚机主机价格便宜,操作简单。但虚机主机没有独立的操作系统,只能通过提供的控制面板操作。虚拟主机由于是共享主机,稳定性较差,访问速度有限。云服务器又叫云主

    2022年6月25日
    28
  • 土法炼钢_百度百科[通俗易懂]

    土法炼钢_百度百科[通俗易懂]土法炼钢_百度百科土法炼钢

    2022年8月5日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号