MySQL中,int(10) 的 10代表什么?

你好,我是猿java

在 MySQL 中,我们定义int类型时需要设置长度,比如INT(10),那么10 到底代表什么?如果超过这个范围会出现什么问题?这篇文章我们来详细地聊一聊。

1. 含义

在数据类型如 INT 后面的括号中的数字(例如 INT(10))指定了显示宽度 ,即当使用 ZEROFILL 属性时,系统会在数值前补零以达到指定的宽度。

  • 存储空间INT 数据类型总是占用 4 字节(32 位),无论显示宽度是多少。
  • 取值范围 :对于有符号的 INT,范围是 -21474836482147483647;对于无符号的 INT UNSIGNED,范围是 04294967295。显示宽度不会改变这一范围。

2. ZEROFILL 的应用

当在 INT 类型后使用 ZEROFILL 时,MySQL 会在数值前补零,以符合指定的显示宽度。如下示例:

sql 复制代码
CREATE TABLE users (
  id INT(10) ZEROFILL,
  name VARCHAR(50)
);

插入数据:

sql 复制代码
INSERT INTO users (id, name) VALUES (123, 'Alice');

查询结果:

diff 复制代码
+-----------+-------+
| id        | name  |
+-----------+-------+
| 0000000123 | Alice |
+-----------+-------+

在这个例子中,id 字段显示为 0000000123,达到 10 位宽度。

3. MySQL 8.0.17 及以后的变化

MySQL 8.0.17 版本开始,整数类型的显示宽度被废弃(deprecated),即使指定了显示宽度,默认情况下也不再影响存储或显示。这意味着:

  • 影响 :不再推荐在整数类型后指定显示宽度,如 INT(10) 中的 10 将被忽略,除非配合 ZEROFILL 使用。

  • 推荐做法 :直接使用 INT 而无需指定显示宽度,除非确实需要与现有系统兼容或有特殊需求。

为了更好地理解INT,下面通过几个例子详细解释。

创建表并插入数据:

sql 复制代码
CREATE TABLE example (
    id INT(10) NOT NULL,
    name VARCHAR(50)
);

INSERT INTO example (id, name) VALUES (1, 'John'), (123456, 'Jane');

查询显示:

sql 复制代码
SELECT * FROM example;

结果:

diff 复制代码
+-------+-------+
| id    | name  |
+-------+-------+
|     1 | John  |
| 123456 | Jane  |
+-------+-------+

在没有使用 ZEROFILL 的情况下,显示宽度 10 并未影响输出格式。

使用 ZEROFILL 的情况:

sql 复制代码
CREATE TABLE example_zf (
    id INT(10) ZEROFILL NOT NULL,
    name VARCHAR(50)
);

INSERT INTO example_zf (id, name) VALUES (1, 'John'), (123456, 'Jane');

SELECT * FROM example_zf;

结果:

diff 复制代码
+-----------+-------+
| id        | name  |
+-----------+-------+
| 0000000001 | John  |
| 0000123456 | Jane  |
+-----------+-------+

这里,id 字段根据显示宽度 10 补充了前导零。

注意:由于 MySQL 8.0.17 及以后的版本中显示宽度被废弃,建议在设计数据库时避免依赖显示宽度,除非有明确的需求和兼容性考虑。

5. 总结

  • INT(10) 中的 10 代表的是显示宽度 ,它用于在与 ZEROFILL 一起使用时补充前导零。

  • 不影响数值的存储大小或取值范围。

  • 在 MySQL 8.0.17 及以后版本中,整数类型的显示宽度被废弃,建议不再使用这种方式指定宽度,除非有特定需求。

6. 学习交流

如果你觉得文章有帮助,请帮忙转发给更多的好友,或关注公众号:猿java,持续输出硬核文章。

相关推荐
专注VB编程开发20年12 分钟前
c#Type数组转成字符串的名称
java·开发语言
中年程序员一枚16 分钟前
多数据源的springboot进行动态连接方案
java·spring boot·后端
w***765516 分钟前
SpringBoot集成MQTT客户端
java·spring boot·后端
HABuo23 分钟前
【Linux进程(五)】进程地址空间深入剖析-->虚拟地址、物理地址、逻辑地址的区分
linux·运维·服务器·c语言·c++·后端·centos
编程饭碗24 分钟前
【多线程编程】
java·开发语言
AllData公司负责人32 分钟前
AllData数据中台-数据同步平台集成开源项目Seatunnel-Web,完成Mysql到Doris同步流程
数据库·mysql·开源
北鹿不麋鹿35 分钟前
自学Java手记:Map集合,Arrays工具类和Lambda表达式
java
码头整点薯条38 分钟前
对接第三方服务踩坑:属性大小写不匹配导致数据解析失败,一个注解搞定!
java
Wpa.wk38 分钟前
性能测试工具 - JMeter工具组件介绍一
java·经验分享·测试工具·jmeter·性能测试
虫小宝39 分钟前
个微iPad协议场景下Java后端的协议解析异常排查与问题定位技巧
java·svn·ipad