首页 > 编程笔记 > MySQL笔记 阅读:18

MySQL中的小数类型(附带实例)

MySQL 中使用浮点数和定点数来表示小数:
定点数类型都可以用 (M,N) 来表示。其中,M 称为精度,表示总共的位数;N 称为标度,表示小数的位数。

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

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

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

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

FLOAT 类型的取值范围如下:
DOUBLE 类型的取值范围如下:
【实例】创建表 tmp2,其中字段 x、y、z 的数据类型依次为 FLOAT、DOUBLE 和 DECIMAL(5,1),SQL 语句如下:
CREATE TABLE tmp2 ( x FLOAT,  y DOUBLE,  z DECIMAL(5,1) );

向表中插入数据 5.12、5.15 和 5.123,SQL 语句如下:
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 字段数值被截断的警告。使用 SELECT * FROM tmp2 语句查看数据输入结果,结果如下:
mysql> SELECT * FROM tmp2;
+----+----+----+
| x  | y  | z  |
+----+----+----+
| 5.1| 5.2| 5.1|
+----+----+----+

相关文章