mysql - 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 8.0.17 开始,数字数据类型不推荐使用 ZEROFILL 属性,整数数据类型的显示宽度属性也是如此。未来的 MySQL 版本将删除对 ZEROFILL 和整数数据类型的显示宽度的支持。
整数的长度属性无论如何都不会限制您可以存储在整数字段中的值,它仅用于显示目的。
推荐阅读
- elasticsearch - Elasticsearch,当文档被存储时,它会被分成不同的碎片吗?
- ios - 自 iOS 13 起,Master Detail Controller 始终以模态方式呈现
- python - 如何将数据形状从(A,B)翻转到(B,A)
- javascript - 如何在模式弹出窗口中获取标签的值
- powershell - 如何从 azure 管道克隆 azure repo?
- java - 根据列的值添加火花数据集中的行号
- css - 使用 CSS 的 JavaFX:当其中包含文本时,第一个 TextField 变为黑色
- android - 如何以编程方式更新复选框首选项中复选框的颜色?
- express - 如何解决 SyntaxError:ExpressJS (ejs) 文件编译过程中出现的意外标识符问题?
- python - 熊猫将字符串列转换为布尔值