mysql int(3)_Mysql 中 int(3) 和 int(11) 的区别

【1】int(3) 和 int(11)的区别(思维惯性认知错误)

这里的3或11代表的是存储在数据库中的具体的长度,总以为int(3)只能存储3个长度的数字,int(11)只会存储11个长度的数字。

【2】Mysql基础知识

学习Mysql基本数据类型时,我们已知:

从声明字段是int类型的那一刻起,int类型的字段就是占四个字节,一个字节8位,也就是4*8=32位。

因此,可以表示的数字个数是2的32次方(2^32 = 4294 9672 96个数字)

而4294 9672 96个数字也就是[0, 4294967295],当然,如果区分正负号的话所存的数值会比较小。

另外,zerofill属性的作用:

(1)插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应长度的0

(2)zerofill默认为int(10)

(3)当使用zerofill时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍。

例如,有符号为[-2147483648,2147483647],无符号为[0, 4294967295]。

【3】SQL学习实例

(1)SQL语句

--本地Mysql版本V8.0.12----------------------------BEGIN ZEROFILL-------------------[1]存在先删除

DROP TABLEstudents;--[2]创建表

CREATE TABLE`students` (

`sId`INT(20) UNSIGNED NOT NULLAUTO_INCREMENT,

`sName`VARCHAR(100) NOT NULL,

`sAge`INT(2) ZEROFILL NOT NULL,

`sAddr`VARCHAR(200) DEFAULT NULL,

`sGrade`INT(2) DEFAULT NULL,

`sStuId`INT(8) DEFAULT NULL,

`sSex`INT(1) UNSIGNED DEFAULT NULL,

`sReverse_00`INT(10) ZEROFILL DEFAULT NULL,

`sReverse_01`INT(11) UNSIGNED DEFAULT NULL,

`sReverse_02`INT(11) ZEROFILL UNSIGNED DEFAULT NULL,PRIMARY KEY(`sId`)

) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;--[3]插入源数据

INSERT INTOstudents(sName, sAge, sAddr, sGrade, sStuId, sSex, sReverse_00, sReverse_01, sReverse_02)VALUES('wangchao', 8, 'heyang', 3, 1803111, 0, 4294967296, 4294967296, 4294967296),

('suntao', 9, 'weinan', 6, 1806110, 1, 4294967296, 4294967296, 4294967296),

('liuyan', 16, 'hancheng', 8, 20190811, 0, 4294967296, 4294967296, 4294967296),

('xuhui', 22, 'hancheng', 12, 201912107, 1, 42949672969, 4294967296, 4294967296);--[4]查询数据信息

SELECT sId, sName, sAge, LENGTH(sAge) ASlen_Age, sAddr,

sGrade, LENGTH(sGrade)ASlen_Grade,

sStuId, LENGTH(sStuId)ASlen_StuId,

sSex,

sReverse_00, LENGTH(sReverse_00)ASlen_Reverse00,

sReverse_01, LENGTH(sReverse_01)ASlen_Reverse01,

sReverse_02, LENGTH(sReverse_02)ASlen_Reverse02FROMstudents;--[5]查询数据长度

SELECT sId, sName, sAge, LENGTH(sAge) AS len_Age FROMstudents;SELECT sId, sName, sGrade, LENGTH(sGrade) AS len_Grade FROMstudents;SELECT sId, sName, sStuId, LENGTH(sStuId) AS len_StuId FROMstudents;SELECT sId, sName, sReverse_02, LENGTH(sReverse_02) AS len_Reverse02 FROMstudents;----------------------------END ZEROFILL-----------------

(2)查询结果数据集

d3d758e85bb7c665ecc23997909364ec.png

(3)结果分析

其实,当我们在选择使用int类型时,不论是选择int(3)还是int(11),它在数据库里面存储的都是4个字节的长度。

只不过在使用int(3)且加zerofill属性时,如果你输入的数值是17,系统会默认为你存储值为017,什么意思呢?

即就是说,这个3代表的仅是一个默认的长度,当不足3位时,系统会帮用零补全,当超过3位时,就没有任何的影响与副作用。

两者之间除了在存储的时候稍微有点区别外,当我们在使用数据时是没有任何差异的。

实际中,要看出两者的不同效果,需要在创建表时字段类型后加zerofill这个属性,表示用0填充,否则是看不出效果的。

因为通常我们在创建数据库表字段时都不会加入这个属性,所以可以说两者之间是没有区别的。

综上所述:只可能对数据存储有差异。

Good Good Study, Day Day Up.

顺序 选择 循环 总结

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值