我是靠谱客的博主 发嗲日记本,最近开发中收集的这篇文章主要介绍mysql unsigned zero_MySQL 中的unsigned与 zerofill两个特殊数据类型属性,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们在了解mysql数据类型不可避免的要先了解这两个属性--unsigned与 zerofill,是否选用这两个属性对选择数据类型有莫大的关系。1、unsigned

unsigned 就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。看起来unsigned 是个不错的类型,尤其是用在自增或者没有负数的情况。但是在实际使用中会出现一些意外的情况。 create table t(a int unsigned,b int unsigned); insert into t select 1,2; select a-b from t; --设置sql_mode set sql_mode = 'NO_UNSIGNED_SUBTRACTION'; select a-b from t;

上图新建了一个测试表,两个字段均为unsigned int型,插入两个值,然后做减法运算时报错,并不是我们想要的结果,正常情况 1-2=-1,但是当数据类型为unsigned时,MySQL 运算的结果也是unsigned,而 -1 已经超出了unsigned 范围,所以会报错。这种情况只需要设置一下sql_mode(NO_UNSIGNED_SUBTRACTION)就可以解决

注意:sql_mode 的设置是有风险的,因为可以通过这个设置允许一些非法的操作。如将 null 值插入not null字段,将非法的日期2017-12-32插入到日期字段。一般在生产环境都都设置为严格模式。所以在不熟悉MySQL底层机制或者不了解 unsigned 原理时,慎用它。 2、zerofill

zerofill 类似一个显示属性,首先来看看MySQL数据库中数字类型后面的长度是什么意思呢,使用show create table 命令来看表的建表语句。

可以看到 int(10) ,这代表什么意思呢?整型不就是4个字节,这个10代表什么意思,如果没有zerofill这属性,括号类的数字没有意义。

修改列,对其添加zerofill属性 select * from t; alter table t change column a a int(4) unsigned zerofill; select * from t;

a 字段前面增加了3个0,这是为什么,因为zerofill属性起作用了,当插入mysql中该字段的值的长度小于定义的长度时,会在数值前面补全相应数据的0。

版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

最后

以上就是发嗲日记本为你收集整理的mysql unsigned zero_MySQL 中的unsigned与 zerofill两个特殊数据类型属性的全部内容,希望文章能够帮你解决mysql unsigned zero_MySQL 中的unsigned与 zerofill两个特殊数据类型属性所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部