创建数据表的时候我们总是要考虑存储数据的字段该用哪种类型、多少长度比较合适,不过在Mysql中如果字段类型是Int,此时长度是不生效的。
1.Int类型的长度问题
1 | CREATE TABLE `test` ( |
有这样一张表,id
是Int类型长度3的字段,那么理论上是不能存储长度超过3的值,比如:
1 | INSERT INTO `test`(`id`, `name`) VALUES (1000000, 'name'); |
不过结果是意外的,这条数据可以正常写入。
2.Int类型的长度为什么不生效
翻了一下Mysql的数据类型文档,发现这么一句话:
对于整数类型,M表示最大显示宽度。 对于浮点和定点类型,M是可以存储的总位数(精度)。 对于字符串类型,M是最大长度。 M的最大允许值取决于数据类型。
所以这个Int类型的“长度”其实叫宽度,也可以理解为显示长度。
3.如果存储的数据长度低于显示宽度会怎样?
1 | INSERT INTO `test`(`id`, `name`) VALUES (1, 'name'); |
当然是可以写入的,但是好像并没有什么特别的不一样,不过我们再执行一条SQL
1 | ALTER TABLE `test` MODIFY COLUMN `id` int(3) UNSIGNED ZEROFILL; |
这次数据产生变化了,变成了这样
1 | id | name |
4.为什么要设计显示宽度?
我也没有得出明确的答案,和小伙伴讨论这个问题~ta觉得是为了方便排序
,你觉得呢?