MySQL 整数数据类型及不同示例

MySQL 整数数据类型及不同示例

💡 原文英文,约2200词,阅读约需8分钟。
📝

内容提要

本文介绍了MySQL中的有符号和无符号整数数据类型,包括ZEROFILL、AUTO_INCREMENT和display_width属性。MySQL支持TINYINT、MEDIUMINT和BIGINT数值数据类型,可以是有符号或无符号的。文章还列出了各种整数数据类型的存储容量和最大最小值。

🔎

延伸解读

显示宽度与ZEROFILL的实用解析

显示宽度(如INT(11))仅影响输出格式,不改变存储范围或字节数。例如,INT(1)和INT(11)存储相同数值,但配合ZEROFILL时,输出会补零至指定宽度。ZEROFILL自动将列设为UNSIGNED,且从MySQL 8.0.17起被弃用,迁移时需注意。

AUTO_INCREMENT列的隐式无符号特性

AUTO_INCREMENT列默认无符号,不能存储负值。插入NULL或0时自动生成下一个序列值;插入非零值则接受该值并重置序列,后续自动值从该值+1开始。这要求设计时确保列不会出现负值,否则会报错。

整数类型选择对性能的影响

根据数据范围选择最小合适的类型可节省存储并提升性能。例如,值不超过255时用TINYINT(1字节)优于INT(4字节)。主键、外键或索引使用INT而非BIGINT能显著减少索引大小和磁盘占用,但需确保未来数据不超出范围。

MySQL 8.0显示宽度弃用的迁移注意

从MySQL 8.0开始,整数类型的显示宽度属性被弃用,但TINYINT(1)等特例除外。迁移到新版本时,应移除或调整依赖显示宽度的定义,避免兼容性问题。ZEROFILL同样被弃用,建议改用其他方式格式化输出。

❓

Q&A

MySQL中有哪些整数数据类型?

MySQL中支持的整数数据类型包括TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。

什么是SIGNED和UNSIGNED整数类型?

SIGNED整数类型可以存储零、正数和负数,而UNSIGNED整数类型只能存储零和正数。

如何使用AUTO_INCREMENT属性?

AUTO_INCREMENT属性用于主键列,自动递增值,通常用于生成唯一的ID。

ZEROFILL属性有什么作用?

ZEROFILL属性用于用零填充空格,适用于UNSIGNED列,影响数据的输出格式。

选择整数数据类型时需要考虑哪些因素?

选择整数数据类型时应考虑数据的范围、是否需要存储负数以及性能和存储空间的优化。

MySQL 8.0版本对整数类型有什么变化?

MySQL 8.0版本开始,整数类型的显示宽度属性已被弃用。

🏷️

标签

➡️

继续阅读