要慎用mysql的enum字段的原因
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了要慎用mysql的enum字段的原因,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2455字,纯文字阅读大概需要4分钟。
内容图文
![要慎用mysql的enum字段的原因](/upload/InfoBanner/zyjiaocheng/920/8f48241b9357464b93f1e073cbf776c0.jpg)
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
内容总结
以上是互联网集市为您收集整理的要慎用mysql的enum字段的原因全部内容,希望文章能够帮你解决要慎用mysql的enum字段的原因所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。