关键词

MySQL小数类型(FLOAT、DOUBLE和DECIMAL)

MySQL 中使用浮点数和定点数来表示小数。
  • 浮点数类型有两种:单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE)。
  • 定点数类型只有 DECIMAL,定点数类型都可以用 (M,N) 来表示,其中:M 称为精度,表示总共的位数;N 称为标度,表示小数的位数。

下表列出了 MySQL 中的小数类型和存储需求。

表1:MySQL 中的小数类型和存储需求
类型名称 说明 存储需求
FLOAT 单精度浮点数 4字节
DOUBLE 双精度浮点数 8字节
DECIMAL(M,D),DEC 压缩的“严格”定点数 M+2 字节

DECIMAL 类型不同于 FLOAT 和 DOUBLE,DECIMAL 实际是以串存储的,可能的最大取值范围与 DOUBLE 一样,但是其有效的取值范围由 M 和 D 的值决定。如果改变 M 而固定 D,则其取值范围将随 M 的变大而变大。

从表1可以看到,DECIMAL 的存储空间并不是固定的,而由其精度值 M 决定的,占用 M+2 字节。

FLOAT 类型的取值范围如下:
  • 有符号的取值范围:-3.402823466E+38 ~ -1.175494351E-38。
  • 无符号的取值范围:0 和 1.175494351E-38 ~ 3.402823466E+38。

DOUBLE 类型的取值范围如下:
  • 有符号的取值范围:-1.7976931348623157E+308 ~ -2.2250738585072014E-308。
  • 无符号的取值范围:0 和 2.2250738585072014E-308 ~ 1.7976931348623157E+308。

【示例】 创建表 tmp2,其中字段 x、y、z 的数据类型依次为 FLOAT、DOUBLE 和 DECIMAL(5,1),向表中插入数据 5.12、5.15 和 5.123,SQL 语句如下:
CREATE TABLE tmp2 (x FLOAT, y DOUBLE, z DECIMAL(5,1));
向表中插入数据:
mysql>INSERT INTO tmp2 VALUES(5.12, 5.15, 5.123);
可以看到,在插入数据时,MySQL 给出了一个警告信息,使用SHOW WARNINGS;语句查看警告信息:
mysql> SHOW WARNINGS;
+-------+------+----------------------------------------+
| Level | Code | Message                                |
+-------+------+----------------------------------------+
| Note  | 1265 | Data truncated for column 'z' at row 1 |
+-------+------+----------------------------------------+
可以看到,给出了 z 字段数值被截断的警告。结果如下:
mysql> SELECT * FROM tmp2;
+------+------+------+
| x    | y    | z    |
+------+------+------+
| 5.1  |  5.2 |  5.1 |
+------+------+------+

本文链接:http://task.lmcjl.com/news/5027.html

展开阅读全文