首页 > 解决方案 > mysql为什么int的字段类型没有长度

问题描述

我从服务器导出一个 mysql 架构并将其导入另一台服务器,但是当我检查表的架构时,我发现所有 int 类型字段都没有长度。

但是当我尝试将其导入本地mysql时,一切正常。

有问题的架构:

mysql> desc user;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int unsigned | NO   | PRI | NULL    | auto_increment |
| key        | varchar(255) | YES  |     | NULL    |                |
| remark     | varchar(255) | YES  |     | NULL    |                |
| created_at | int          | YES  |     | NULL    |                |
| updated_at | int          | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

本地架构:

mysql> desc user;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| key        | varchar(255)     | YES  |     | NULL    |                |
| remark     | varchar(255)     | YES  |     | NULL    |                |
| created_at | int(11)          | YES  |     | NULL    |                |
| updated_at | int(11)          | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

服务器上的 mysql 是 docker 的 mysql 的官方镜像:Server version: 8.0.21 MySQL Community Server - GPL

我的本地 mysql 是由 homebrew 安装的:Server version: 8.0.16 Homebrew

为什么会发生这种情况?以及如何解决?

标签: mysql

解决方案


正如mysql手册对整数数据类型属性所说:

从 MySQL 8.0.17 开始,数字数据类型不推荐使用 ZEROFILL 属性,整数数据类型的显示宽度属性也是如此。未来的 MySQL 版本将删除对 ZEROFILL 和整数数据类型的显示宽度的支持。

整数的长度属性无论如何都不会限制您可以存储在整数字段中的值,它仅用于显示目的。


推荐阅读