bfchengnuo / MyRecord

平时充电做的笔记,一个程序猿的自我修养.
https://bfchengnuo.com/MyRecord/
33 stars 8 forks source link

关于MySQL中字段的长度 #62

Closed bfchengnuo closed 4 years ago

bfchengnuo commented 4 years ago

创建表的时候,很多时候我们会顺便指定一个长度,例如 int(3) 这样,之前我没怎么在意,这个 3 到底指的是什么?

凭感觉,好像是如果超过了 3 位数要报错,然而其实并没有什么卵用,你照样可以插入 int 的最大值。

bfchengnuo commented 4 years ago

以 int 为例:INT[(M)] [UNSIGNED] [ZEROFILL]

M 指示最大显示宽度。最大有效显示宽度是 255。显示宽度与存储大小或类型包含的值的范围无关。 显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

MySQL 中 int 类型占用 4 个字节,即能表示 2^32 个数,最大值为 2^31-1。 不管你 int(11) 还是 int(5) 字段长度就是固定的 4 个字节。

int(3) 其实是和另一个属性 zerofill 配合使用的,表示如果该字段值的宽度小于 3 时,会自动在前面补 0 ,如果宽度大于等于 3 ,那就不需要补 0 。

bfchengnuo commented 4 years ago

通过以上的说明,可以得出:"整型"的长度并不会限制存储的数字范围,int 和 int(3) 的存储范围都是一样的。

但是,对于"浮点型"的长度来说,它是用来限制数字存储范围的,比如 float(3,2) 只能够写入 0.00~999.99。