MySQL中Decimal
类型和Float/Double
等区别
在MySQL中,存在float
、double
等非标准数据类型,以及decimal
这种标准数据类型。它们之间的区别如下:
float
、double
等非标准类型在数据库中保存的是近似值,而decimal
则以字符串的形式保存数值。float
和double
类型可以存储浮点数(即小数类型),但是float
有一个问题,当给定的数据是整数时,它会以整数形式存储。这在处理货币值时会遇到问题,例如,如果默认值为0.00,实际存储的却是0;同样,如果存储货币值为12.00,实际存储的是12。- 幸好MySQL提供了
decimal
这个数据类型,它可以轻松解决上述问题。decimal
类型在MySQL中以相同的类型实现,这符合SQL92标准。它们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。
数据定义
float(M,S)
:其中M
表示全长,S
表示小数点后的长度。以下是一个示例:
CREATE TABLE t1 (c1 float(10,2), c3 decimal(10,2));
INSERT INTO t1 VALUES (9876543.21, 9876543.12);
SELECT * FROM t1;
输出结果如下:
+------------+------------+
| c1 | c3 |
+------------+------------+
| 9876543.00 | 9876543.12 |
+------------+------------+
- 再举一个例子:
DECIMAL(5,2)
CREATE TABLE t1 (id1 float(5,2) DEFAULT NULL, id2 double(5,2) DEFAULT NULL, id3 decimal(5,2) DEFAULT NULL);
INSERT INTO t1 VALUES (1.2345, 1.2345, 1.2345);
SHOW WARNINGS;
输出结果如下:
+-------+------+------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------+
| Note | 1265 | Data truncated for column 'id3' at row 1 |
+-------+------+------------------------------------------+
解释:
1.2345
:小数点后最多2位,可以保存,但会有一个警告。12.34
:符合限制,可以保存。1234.5
:小数部分未满2位,需要补0,应该保存为1234.50
。但整个位数超过了5,保存时报错。1.2
:小数部分未满2位,需要补0,按照1.20
保存。
默认状态比较
- 浮点数如果不指定精度和标度,会按照实当然可以!下面是您可以直接复制到博客中的Markdown格式的文本:
在MySQL中,存在float
、double
等非标准数据类型,以及decimal
这种标准数据类型。它们之间的区别如下:
- 存储方式:
float
和double
类型以二进制形式存储近似值,而decimal
类型以字符串形式存储数值。 - 精度:
float
和double
类型是近似值,其精度取决于所分配的存储空间。而decimal
类型是精确值,它以指定的精度和标度来存储数据。 - 存储空间:
float
和double
类型的存储空间是固定的,它们分别占用4字节和8字节。而decimal
类型的存储空间是可变的,它的长度取决于指定的精度和标度。
在使用这些数据类型时,需要根据具体的需求来选择合适的类型。如果需要存储对精度要求较高的数据,特别是涉及货币等需要精确计算的场景,建议使用decimal
类型。而对于一般的科学计算等情况,float
和double
类型可能更为适用。
请注意,以上文本已经使用Markdown格式编写,您可以直接将其复制到您的博客编辑器中,并进行格式化和发布。