在mysql中使用int相关的数据类型时, 如果不太了解其存储方式, 会产生一些误用的情况.
如: 只保存0-9之间的数字, 可能会直接用int(1).
习惯性的以为int(1)就相当于varchar(1)一样, 其实不然.
下面来说下int相关数据类型的一些简单介绍:
- 数据类型/字节及取值范围
类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
tinyint | 1 | -128 | 127 |
smallint | 2 | -32768 | 32767 |
mediumint | 3 | -8388608 | 8388607 |
int | 4 | -2147483648 | 2147483647 |
bigint | 8 | -9223372036854775808 | 9223372036854775807 |
-
数据定义
- TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4
- SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6
- MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9
- INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11
- BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20
-
说明
M不是存储数据的具体长度, 而是要与ZeroFill配合使用.
也就是说int(1)与int(10)其实存储的数据范围是一致的.而后面数字, 只有指定zerofill才会生效.
如: int(4) zerofill, 值为1, 则数据库中保存的是:0001