Code前端首页关于Code前端联系我们

unsigned和zerofill,MySQL的两个特殊属性

terry 2年前 (2023-09-26) 阅读数 43 #数据库

1 unsigned

unsigned是去掉数字类型,例如int类型:-2^31 ~ 2^31 - 1,并且没有signed int范围:0 ~ 2^32。无符号似乎是一个很好的类型,特别是当用于自动乘法或非负整数时。但在实际使用过程中,可能会出现一些意想不到的情况。

unsigned与 zerofill,MySQL 的两个特殊属性

如上图所示,我们创建了一个新的测试表。这两个字段都是 unsigned int 类型。我们输入了两个值,然后做减法函数的时候就报错了。这不是我们想要的结果。一般 1-2=-1 ,但是当数据类型为无符号时,MySQL运算的结果也是无符号的,-1超出了无符号范围,所以会出错。

如何解决这个问题?设置sql_mode可以解决这个问题,这是一个东西。例如,如果在非空字段中输入空值,则日期字段中将输入无效日期 2017-12-32。一般来说,生产环境的设置是严格的。因此,在不熟悉MySQL基本结构或者不理解无符号规则的情况下,请谨慎使用。

2 Zerofill

zerofill 与显示的字符相同。首先,我们来看看MySQL数据库中数字类型的长度意味着什么。使用show create table命令可以查看建表语句。

unsigned与 zerofill,MySQL 的两个特殊属性

你会看到int(10)。这是什么意思?整数不是只有4个字节吗?这个10是什么意思?如果没有zerofill属性,括号中的数字就没有意义。? 我们再看一下表

unsigned与 zerofill,MySQL 的两个特殊属性

a中的数据。加上体育场前面的三个0。这是因为 Zerofill 属性有效。如果mysql字段中输入的值的长度小于该值的长度,则会在该值的前面。相关数据用零填充。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门