首先说一下mysql的数值类型,MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
<td>
<strong>字节</strong>
</td>
<td>
<strong>最小值</strong>
</td>
<td>
<strong>最大值</strong>
</td>
<td>
</td>
<td>
<strong>(带符号的/无符号的)</strong>
</td>
<td>
<strong>(带符号的/无符号的)</strong>
</td>
<td>
1
</td>
<td>
-128
</td>
<td>
127
</td>
<td>
</td>
<td>
</td>
<td>
255
</td>
<td>
2
</td>
<td>
-32768
</td>
<td>
32767
</td>
<td>
</td>
<td>
</td>
<td>
65535
</td>
<td>
3
</td>
<td>
-8388608
</td>
<td>
8388607
</td>
<td>
</td>
<td>
</td>
<td>
16777215
</td>
<td>
4
</td>
<td>
-2147483648
</td>
<td>
2147483647
</td>
<td>
</td>
<td>
</td>
<td>
4294967295
</td>
<td>
8
</td>
<td>
-9223372036854775808
</td>
<td>
9223372036854775807
</td>
<td>
</td>
<td>
</td>
<td>
18446744073709551615
</td>
Mysql类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。
所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。
所以int(10)与int(11)后的括号中的字符表示显示宽度,整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,int类型的字段能存储的数据上限还是2147483647(有符号型)和4294967295(无符号型)。
阅读全文