mysql 字段类型
数字
tinyint | 1字节 |
有符号:-128~127 无符号:0~255,2的8 次方 |
smallint | 2字节 |
有符号:-32768~32767 无符号:0~65535,2的16次方 |
mediumint | 3字节 |
有符号:-8388608~8388607 无符号:0~16777215,2的24次方 |
int | 4字节 |
有符号:-2147483648~2147483647 无符号:0~4294967295,2的32次方 |
bigint | 8字节 |
有符号:-9223372036854775808~9223372036854775807 无符号:0~18446744073709551615,2的64次方 |
- 可以为整型指定宽度,int(5) 表示当数值宽度小于5位时在数字前面填满宽度,要配合zerofill属性使用,负责没有意义。给字段设置zerofill 和 unsigned配套使用。
- unsigned int 存 ip 比 char 存 ip 更节省空间,inet_aton('192.168.1.200') 将 ip 转换为无符号整型,inet_ntoa(3232241412) 将无符号整型转换为 ip。php 中通过 ip2long() 和 long2ip() 来进行前面的转换。参见:http://blog.csdn.net/fdipzone/article/details/49532001
float(m,d) | 4字节 | 单精度浮点型;m是总位数,d小数位 |
double(m,d) | 8字节 | 双精度浮点型;m是总位数,d小数位 |
decimal(m,d) 或dec(m,d) |
m+2 | 存储字符串的浮点数 |
- float(m,d)、double(m,d),插入整数时,小数位自动补上d个0;小数位不够d个时,自动补0到d位。浮点数精度误差参见:http://www.jb51.net/article/31723.htm
- mysql 内部使用 double 作为内部浮点计算的类型。
- decimal(m,d) 用字符串来存储,不存在精度损失,但浮点数类型在存储同样范围的值时,通常比decimal 使用更少的空间。所以只在都对小数进行精确计算时才使用decimal,但在数据量比较大的时候,可以考虑使用 bigint 代替 decimal,这样可以同时避免浮点存储计算不精确和decimal精确计算代价高的问题。 参见《高性能mysql》 150页。