mysql 第1.14章 创建-smallint(3) mysql 第1.14章 创建-smallint(3)

9小时前

一、整型

常见细分为 tinyint、smallint、mediumint、int、bigint 这几种。

  • tinyint:存储所占一个字节,一个字节等于 8 bit,根据 1 bit可以存储 0 到 1 两种可能性,因此 tinyint 类型可以存储 2 的 8 次方,也就是 256 种可能性,从 0 开始计数,无符号也就是可以存储 0~255,如果是有符号,那就是 -128~127。 

  • smallint:存储所占两个字节,同上也就是可以存储 2 的 16 次方,也就是可以存储 65536 种可能性,无符号从 0 开始则是可以存储 0~65535,有符号则是 -32768~32767。

  • mediumint:存储所占三个字节,也就是 2 的 24 次方,可以存储 16777216 种可能性,无符号可以存储 0~16777215,有符号可以存储 -8388608~8388607。

  • int:存储所占四个字节,也就是 2 的 32 次方,可以存储 4294967296 种可能性,无符号可以存储 0~4294967295,有符号则是 -2147483648~2147483647。

  • bigint:存储所占 8 个字节,也就是 2 的 64 次方,可以存储 2 的 64 次种可能性,无符号可以存储 0~((2³²×²)-1),有符号则是 -(2³²×²)/2 ~ (2³²×²)/2-1。

二、括号

在 MySQL 数据库中,SMALLINT(3) 括号中的数字 ‌3‌ 代表的是‌显示宽度(Display Width)‌,而不是存储长度或数据范围的限制。

①、核心含义:仅影响显示,不影响存储

  • 存储空间固定‌:无论括号里的数字是多少(例如 SMALLINT(1)、SMALLINT(3) 或 SMALLINT(100)),SMALLINT 类型始终占用 ‌2 个字节‌ 的存储空间。

  • ‌取值范围不变‌:

    • ‌有符号(SIGNED)‌:范围始终是 ‌-32,768 到 32,767‌。

    • 无符号(UNSIGNED)‌:范围始终是 ‌0 到 65,535‌。

    • 即使你定义为 SMALLINT(3),它依然可以存储超过 3 位数的值(如 10000),只要该值在上述范围内即可。

②、实际作用:配合 ZEROFILL 使用

这个数字主要在字段设置了 ‌ZEROFILL‌(零填充)属性时才有实际视觉效果:

  • ‌当数值位数小于指定宽度时‌:数据库会在查询结果中自动在数字左侧补零,直到达到指定的宽度。

  • 当数值位数大于指定宽度时‌:按实际数值完整显示,不会截断。

‌举例说明:

假设定义字段为 age SMALLINT(3) ZEROFILL:

  • 插入值 1 -> 查询显示为 001

  • 插入值 12 -> 查询显示为 012

  • 插入值 123 -> 查询显示为 123

  • 插入值 1000 -> 查询显示为 1000(虽然超过了宽度3,但因为在 SMALLINT 范围内,所以正常显示,不补零也不截断)

注意‌:如果没有设置 ZEROFILL,括号中的数字对数据的存储和显示几乎没有影响。

③、版本变迁与建议

  • MySQL 8.0.17 及以后版本‌:官方已‌弃用‌整数类型的显示宽度属性和 ZEROFILL 属性。在未来的 MySQL 版本中,这些特性可能会被完全移除。

  • ‌最佳实践‌:

    • 在现代 MySQL 开发中,建议直接写 SMALLINT,无需指定括号内的数字。

    • 如果需要在应用层实现“前导零”的效果(如编号 001),建议在应用程序代码中使用格式化函数(如 LPAD)处理,而不是依赖数据库的显示宽度特性。

④、总结

SMALLINT(3) 中的 3 ‌不限制‌你能存多大的数,也‌不节省‌空间。它只是一个旧的显示格式提示,仅在配合 ZEROFILL 时对查询结果的展示形式有影响。在现代数据库设计中,通常可以忽略这个数字。

阅读 17

mysql文章
带到手机上看