MySQL中int(10)和int(11)的区别详解

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

MySQL中int(10)和int(11)的区别详解

蹲街式等待   2023-03-23 我要评论

一、背景

在创建数据库表的时候,我们经常会用到int(x)来定义一个字段的类型,一直误以为这里的x表示存储数字的长度。

其实大错特错,这里的 x 指的是 最大显示宽度(最大有效显示宽度是255),且显示宽度与存储大小或类型包含的值的范围无关。

二、MySQL整数类型

类型字节取值范围显示宽度
tinyint1-128 ~ 1274
smallint2-32768 ~ 327676
mediumint3-8388608 ~ 83886079
int4-2147483648 ~ 214748364711
bigint8-9223372036854775808 ~ 922337203685477580720

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)

总结:

显示宽度整数类型的取值范围是无关的。

显示宽度只是指明 mysql 最大可能显示的数字个数,数值的位数小于指定的宽度时左侧用数字 0 填充。

如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们