mysql中的int(1)和int(10)的区别
2023-12-15 14:43:01
今天偶然发现同事在写sql建表的时候把int类型括号后面的数字写成了1,但是我发现数据库里面的值已经远远超过了1位所能表示的范围,所以括号里面的数字肯定不是表示长度了(印象中早期的navivat建表的时候,int类型如果默认不指定长度,默认好像是10,我现在用的是naviavat16,没有出现默认为10的情况),下面就总结一下int(1)和int(10)到底有啥区别:
我们先来看第一个测试表:
CREATE TABLE `int_test` (
`id` int NOT NULL AUTO_INCREMENT,
`age` int(1) NOT NULL,
`salary` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='int长度测试';
然后执行Insert添加数据:
INSERT INTO `int_test`(age,salary) VALUES(1,10),(10,100),(10,1000000000);
再执行查询语句:
?由此可见:int(1)和int(10)实际上没什么区别,不影响查询和计算结果,也就是说底层在存储的时候实际上还是4个字节,范围是负21亿多到正21亿多
再看第二个测试表:注意建表语句中多了ZEROFILL,翻译过来是0填充的意思
CREATE TABLE `int_test_1` (
`id` int NOT NULL AUTO_INCREMENT,
`age` int(1) ZEROFILL NOT NULL,
`salary` int(10) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='int长度测试';
仍然insert同样的数据:
INSERT INTO `int_test_1`(age,salary) VALUES(1,10),(10,100),(10,1000000000);
再执行查询:
?换navicat执行查询:
?
?由此可以得出以下结论:
1、对于int类型括号里面的数字没有实际意义,在底层存储的时候占用的还是4个字节,特别要注意的是这个数字并不表示长度
2、如果在括号里面写了数值,并且建表语句用了zerofill,也没有什么影响,只是不同的客户端在处理的时候显示不一样,仅此而已
3、不论有没有在括号里面指定数字,以及不论有没有zerofill,都不会影响计算结果
文章来源:https://blog.csdn.net/qq_17805707/article/details/135014891
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!