内容提要
本文介绍了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版本开始,整数类型的显示宽度属性已被弃用。