mysql中的int(1)和int(10)的区别

今天偶然发现同事在写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);

再执行查询语句:

mysql中的int(1)和int(10)的区别_第1张图片mysql中的int(1)和int(10)的区别_第2张图片

 由此可见: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);

再执行查询:
mysql中的int(1)和int(10)的区别_第3张图片

 mysql中的int(1)和int(10)的区别_第4张图片换navicat执行查询:

mysql中的int(1)和int(10)的区别_第5张图片

 mysql中的int(1)和int(10)的区别_第6张图片

 由此可以得出以下结论:

1、对于int类型括号里面的数字没有实际意义,在底层存储的时候占用的还是4个字节,特别要注意的是这个数字并不表示长度

2、如果在括号里面写了数值,并且建表语句用了zerofill,也没有什么影响,只是不同的客户端在处理的时候显示不一样,仅此而已

3、不论有没有在括号里面指定数字,以及不论有没有zerofill,都不会影响计算结果

你可能感兴趣的:(mysql,数据库)