Mysql学习要慎用mysql的enum字段的原因
《Mysql学习要慎用mysql的enum字段的原因》要点: MYSQL应用PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点: MYSQL应用膘哥观点: MYSQL应用单曲观点: MYSQL应用简单观点: MYSQL应用天枫观点: MYSQL应用中庸观点: MYSQL应用竖琴螺观点: MYSQL应用上面各种观点重点集中在PHP这种弱类型语言对引号不重视,程序员不写容易引起插入的语句不是自己想要的结果的问题,容易出现int时没有用引号导致插入了新值而不是定的那个值: MYSQL应用表结构如下:? MYSQL应用
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
MYSQL应用? MYSQL应用
INSERT INTO `test`.`enum2tinyint` (`switchs`,`switch`) VALUES ('1','1');
1 1
MYSQL应用PHP的弱类型问题,特别是对int类型的情况,实践如下:? MYSQL应用
INSERT INTO `test`.`enum2tinyint` (`switchs`,`switch`) VALUES (1,'1');
none 1
MYSQL应用如果没有带引号插入enum字段后如下(是第2个值success):? MYSQL应用
INSERT INTO `test`.`enum2tinyint` (`switchs`,`switch`) VALUES (2,'1');
success 1
MYSQL应用 MYSQL应用规劝: MYSQL应用最终结论: MYSQL应用为何表示的最大正数比最小负数的绝对值少1呢? MYSQL应用提问: MYSQL应用Mysql里int(1)和int(11)差别很大的,mysql的int,有个属性,UNSIGNED ZEROFILL? 后面的ZEROFILL,就是有定义的位数不够则用零补齐对齐一下(这儿可能涉及到索引的性能罢):int,? 长度(M)=5,属性=UNSIGNED ZEROFILL(无符号,用0来填充位数),00001,00002. MYSQL应用但这个tinyint呢,tinyint(1)和tinyint(4)一样的? MYSQL应用看这文章后:/article/53424.htm MYSQL应用我估计:mysql这块对一个字节不像int这种四个字节要进行对其前部分进行部分字节索引,如果说tinyint(1)和tinyint(4)是一样的表示范围情况下,但mysql对tinyint数字长度位数作了可设置的限定,从理论上说其存在硬盘里的字节是不一样才是合乎逻辑的,这块估计还是为了对字节进行对齐方便索引等,以提升效率为主罢,l如:ike keyword%??? 索引有效,如果统一对齐,索引效果会不会更好呢?我也只是猜测. MYSQL应用在网上找了下这个enum的mysql的大体实现如下: MYSQL应用一)enum的存储原理我仔细查看了下手册.是这样的: MYSQL应用二)tinyint: MYSQL应用最后,Enum,既然要用它,就不必要使用什么0,2来代替实际的字符串了.甚至中文字符串.他并不会对数据库性能进行多余开销.因为对于它来说,你使用'0','1','2'和'张三','李四','王五'数据表所占的存储空间一样.但是考虑到我们实际应用时数据需要从db服务器回传到web app,所以在网络传输时,当然还是尽可能的传输小数据比较好.所以如果很在意这些,还是不用它好了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Mysql实例MYSQL代码 定期备份Mysql数据库
- MySQL8.0的InnoDB和MyISAM是否支持hash索引
- Mysql学习MySQL笔记之数学函数详解
- Mysql应用MySQL关于exists的一个bug
- MYSQL教程Centos6.5编译安装mysql 5.7.14详细教程
- 解决mysql能用localhost连接,但不能使用127.0.0.1连接的问
- Mysql学习mysql中Table is read only的解决方法小结
- MYSQL数据库MySQL数据库优化推荐的编译安装参数小结
- Mysql应用MySQL错误ERROR 2002 (HY000): Can't connect
- MYSQL数据库Linux下mysql的root密码修改方法