=========================================================
MySQL常见的整数类型有:
TINYINT: 占用8位空间
SMALLINT: 占用16位空间
MEDIUMINT: 占用24位空间
INT: 占用32位空间
BIGINT:只用64位空间
MySQL常见的实数类型有:
DECIAML: 用于存储精确的数据
FLOAT和DOUBLE:用于存储浮点类型的数据
可以设置数据类型的UNSIGNED属性来表示不允许有负值数据,同时增大正数的上限值。
如果TINYINT的存储范围为-128到127之间,而UNSIGNED TINYINT的存储范围为0到255。
=========================================================
在MySQL 4.1版本前使用浮点运算来实现DECIAML计算,因此会导致进度损失导致一些奇怪的结果。
在MySQL 5.0极其更高版本中,MySQL使用二进制字符串来保存DECIMAL类型数据(每4个字节存放9个数字),如对于DECIMAL(18,9),小数部分存放9个数字需要4个字节,整数部分存放9个数字需要4个字节,小数点本身需要1个字节,因此DECIMAL(18,9)类型的数据需要9个字节的存放空间。
FLOAT使用4个字节存储,DOUBLE使用8个字节存储,MySQL使用DOUBLE作为内部浮点计算的类型。
CPU直接支持原生的浮点计算,因此浮点运算比DECIMAL运算更快。
由于DECIMAL类型需要额外的空间和计算开销,因此可以考虑将DECIMAL转换成BIGINT来计算,如对于仅需到万分之一的财务数据,可以将数据乘以100万后变成BIGINT数据来存放。
由于十进制的数据无法用二进制来精确表示,只能尽可能的接近,如使用float(15,5)来存放1234567.10,最终存储的数据为1234567.12500,因此一定不能使用浮点数来存放金钱相关的数据。
=========================================================
数据类型占用存储空间和存储范围