1. 整数类型:
类型 | 存储 | 正负数范围 | 全正数范围 | 全正长度 | 备注 |
---|---|---|---|---|---|
tinyint | 1字节 | -128~127 | 0~255 | 3 | |
smallint | 2字节 | -32768~32767 | 0~65535 | 5 | |
mediumint | 3字节 | -8388608~8388607 | 0~16777215 | 8 | 可用于邮编号 |
int | 4字节 | -2147483648~2147483647 | 0~4294967295 | 10 | 可用拼接1的方式存手机号 |
bigint | 8个字节 | ±9223372036854775808-1 | 18------- | 20位 | 可存储手机号 |
注意:
1.在类型后面加unsigned,可向服务器声明全正数。可使正数最大值x2
一般喜欢使用int作为主键类型,若在表定义时加上int unsigned。可使主键范围扩到原来的两倍,不用担心主键值用尽的尴尬情况
2.手机号可以用int也可以用bigint。但即使是bigint也比varchar(11)占用更少的空间,从而在这一点上性能更高。
3.但是:任何数字列与unsigned定义的列进行计算后,若出现负数结果,则会返回 UNSIGNED的最大值。这个问题是继承C语言的。若考虑到会产生列与列直接的计算,需要避免UNSIGNED的定义。只在主键列上UNSIGNED设置即可,因为主键列一般设置为业务无关自增列。
4.留空
2.数值型(DEMICAL,NUMERIC)
DEMICAL,NUMERIC都是用来存储精确的数值,一般金额使用这个参数,DEMICAL是基本类型,NUMERIC按DEMICAL进行计算。DEMICAL按照二进制的格式存储
例如:我们公司使用DEMICAL(18,4)来存储金额数值
小数位为4位,整数位位18-4=14位
DEMICAL(0),无法存数据,DEMICAL(X)不指定小数位数时,默认为0,理论上DEMICAL最长可以容纳65位数字
3.位值型(bit)
用于存储位值,最长可达64位,mysql命令行客户端无法查看位值数据。导出时也可能显示乱码,不要担心。
应用:bit(1) 用于判断是否
bit(32) 用于存储IP地址,只占4字节,应该是最省空间的选择
例如:bit(6) 存入 b'101',其实是按照00101来存储,不足的会在左边补零,读取出来视不同客户端也会补零
4.浮点类型
float与double
其小数点位数和总位数的关系与DEMICAL相似。浮点类型的数值是不精确的,需要精确计算的数值不建议设置为浮点型
例如:float(7,4) 存入9999.00009,小数位超出1位,其他的类型都会报错,
但是浮点型会自动四舍五入,再次取出后就会变成999.0001
本文转自 angry_frog 51CTO博客,原文链接:http://blog.51cto.com/l0vesql/2046544