关于mysql一些数据类型长度无法修改,如int类型长度强制为0的情况的一些解释

本文解析了MySQL 8.0中关于TINYINT, SMALLINT, MEDIUMINT, INT等类型长度固定的原因,由于显示宽度被废弃,长度修改受限。尽管不影响正常使用,但对于开发者了解底层原理有帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于mysql一些数据类型长度无法修改,如int类型长度强制为0的情况的一些解释

前言

根据公司需求,写了几个新表,然后发现个别字段,如TINYINT, SMALLINT, MEDIUMINT, INT等类型会出现字段长度为0的情况,然后无论怎么修改都是无济于事。

原因

MySQL Server 8.0.17 deprecated the display width for the TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT data types when the ZEROFILL modifier is not used, and MySQL Server 8.0.19 has removed the display width for those data types from results of SHOW CREATE TABLE, SHOW CREATE FUNCTION, and queries on INFORMATION_SCHEMA.COLUMNS, INFORMATION_SCHEMA.ROUTINES, and INFORMATION_SCHEMA.PARAMETERS (except for the display width for signed TINYINT(1)). This patch adjusts Connector/J to those recent changes of MySQL Server and, as a result, DatabaseMetaData, ParameterMetaData, and ResultSetMetaData now report identical results for all the above-mentioned integer types and also for the FLOAT and DOUBLE data types. (Bug #30477722)

翻译过来的意思就是:

从8.0.17版本开始,TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT类型的显示宽度将失效。

所以才会出现上面说的几个类型无法修改长度。但是这个并不影响我们表的使用,基本上是可以忽略掉的细节!
完事跑路!

### MySQL 数据类型及其默认长度 #### 整型数据类型的默认长度 对于整型数据类型MySQL 并未强制要求定义显示宽度。`INT` 类型无论是否指定了显示宽度 `M`,其存储大小始终固定为 4 字节[^5]。 ```sql CREATE TABLE example ( id INT, age TINYINT DEFAULT 0 ); ``` #### 浮点型数据类型的默认长度 浮点型数据类型如 `FLOAT` 和 `DOUBLE` 同样不需要指定精度,默认情况下分别占用 4 字节和 8 字节的存储空间。如果希望设置特定的小数位数,则可以通过 `(M,D)` 形式来声明,其中 M 是总位数而 D 则表示小数部分的位数[^3]。 ```sql CREATE TABLE measurements ( temperature FLOAT(7,2), weight DOUBLE ); ``` #### 日期与时间类型数据类型 日期时间和时间戳类别的字段通常具有固定的格式,并且不会涉及到所谓的“长度”。例如: - DATE:'YYYY-MM-DD' - TIME:'HH:MM:SS' - DATETIME 或 TIMESTAMP:'YYYY-MM-DD HH:MM:SS' 这些都遵循标准的时间表达方式。 #### 字符串类型数据类型 字符串类型的字段确实存在长度的概念,特别是像 `VARCHAR` 这样的可变长度字符集。当创建表结构时不提供具体长度时,某些客户端工具可能会自动应用一个合理的默认值;然而最佳实践还是应该显式地给出期望的最大长度以确保预期行为[^2]。 ```sql CREATE TABLE articles ( title VARCHAR(255), -- 明确设定最大长度 content TEXT -- 文本类型无需指定长度 ); ```
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值