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 TABLE students;
-- [2]创建表
CREATE TABLE `students` (
  `sId` INT(20) UNSIGNED NOT NULL AUTO_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 INTO 
students(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) AS len_Age, sAddr,
sGrade, LENGTH(sGrade) AS len_Grade,
sStuId, LENGTH(sStuId) AS len_StuId, 
sSex,
sReverse_00, LENGTH(sReverse_00) AS len_Reverse00,
sReverse_01, LENGTH(sReverse_01) AS len_Reverse01,
sReverse_02, LENGTH(sReverse_02) AS len_Reverse02
FROM students;
-- [5]查询数据长度
SELECT sId, sName, sAge, LENGTH(sAge) AS len_Age FROM students;
SELECT sId, sName, sGrade, LENGTH(sGrade) AS len_Grade FROM students;
SELECT sId, sName, sStuId, LENGTH(sStuId) AS len_StuId FROM students;
SELECT sId, sName, sReverse_02, LENGTH(sReverse_02) AS len_Reverse02 FROM students;
-- --------------------------END ZEROFILL-----------------

 (2)查询结果数据集

(3)结果分析

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: int10和int11都是MySQL的整数类型,但它们的区别在于它们能够存储的数字范围不同。int10可以存储的数字范围是-2147483648到2147483647,而int11可以存储的数字范围是-9223372036854775808到9223372036854775807。因此,如果需要存储更大的数字,应该选择int11。 ### 回答2: MySQLint10和int11是两种数据类型,它们之间的主要区别在于其最大值的不同。 int10是指10位带符号整数,其取值范围为-2147483648到2147483647,最大值为10位带符号整数能表示的最大值。 int11是指11位带符号整数,其取值范围为-1099511627776到1099511627775,最大值为11位带符号整数能表示的最大值。 因此,int11的取值范围比int10更大,最大值也更高。但需要注意的是,使用int11需要更多的存储空间,因为它需要11个字节来存储,而int10只需要4个字节。 在实际使用,我们需要根据具体的需求和存储空间来选择使用int10还是int11,如果需要更大的取值范围,可以选择int11,但需要注意它的存储空间较大。同时,对于一些较小的数值,使用int11会浪费存储空间,此时可以选择int10进行存储。 ### 回答3: MySQLint类型用于存储整型数据。其int10和int11都属于int类型,但它们之间是有一定的区别的。 首先,int10可以存储10位整数,即最大值为2147483647,最小值为-2147483648。而int11可以存储11位整数,即最大值为4294967295,最小值为-4294967296。从数据范围上来看,int11可以存储更大的整数,因此在存储很大的数字时会更加方便,而int10的数据范围则相对较小。 其次,由于int11需要占用更多的存储空间,所以它与int10的存储空间也有所区别int10占用4个字节,而int11占用5个字节。这意味着在存储相同数量的数据时,int10占用的空间会更小,而int11则需要更多的存储空间。 除了这些差异之外,int10和int11在使用和处理上没有其他显著的区别。它们都是整型数据类型,支持常规的整数计算和比较操作。当在MySQL定义表格时,可以根据具体需求选择使用哪种数据类型。 总的来说,int10和int11区别在于它们的数据范围和存储空间大小。对于小型项目来说,使用int10足以满足需求,而在需要存储较大的整型数据时可以选择int11。但是,应该注意的是,为了避免内存浪费,并避免出现溢出等问题,在选择具体的数据类型时还应注意合理匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值