这篇文章主要介绍了MySQL中int(10)和int(11)的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL中int(10)和int(11)的区别是什么文章都会有所收获,下面我们一起来看看吧。
一、背景
在创建数据库表的时候,我们经常会用到int(x)来定义一个字段的类型,一直误以为这里的x表示存储数字的长度。
其实大错特错,这里的 x 指的是 最大显示宽度(最大有效显示宽度是255),且显示宽度与存储大小或类型包含的值的范围无关。
二、MySQL整数类型
类型 | 字节 | 取值范围 | 显示宽度 |
---|---|---|---|
tinyint | 1 | -128 ~ 127 | 4 |
smallint | 2 | -32768 ~ 32767 | 6 |
mediumint | 3 | -8388608 ~ 8388607 | 9 |
int | 4 | -2147483648 ~ 2147483647 | 11 |
bigint | 8 | -9223372036854775808 ~ 9223372036854775807 | 20 |
MySQL 类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。
该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
当结合可选扩展属性 zerofill 使用时, 默认补充的空格用零代替。
例如,对于声明为 INT(5) zerofill 的列,值 4 检索为 00004。请注意如果在整数列保存超过显示宽度的一个值,当 MySQL 为复杂联接生成临时表时会遇到问题,因为在这些情况下 MySQL 相信数据适合原列宽度。
所有整数类型可以有一个可选(非标准)属性 UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。
那取值范围和显示宽度到底有什么关系呢?利用 int 做了个实验:
create table int_demo(
id int not null auto_increment,
int_4 int(4) UNSIGNED zerofill,
int_8 int(8) UNSIGNED zerofill,
primary key (id)
);
insert into int_demo (int_4, int_8) VALUES (2, 1000),(123456, 1234567898);
select * from int_demo;
查询结果:
mysql> select * from int_demo;
+----+--------+------------+
| id | int_4 | int_8 |
+----+--------+------------+
| 1 | 0002 | 00001000 |
| 3 | 123456 | 1234567898 |
+----+--------+------------+
2 rows in set (0.00 sec)