MYSQL:DECIMAL,逗号后的精度为10位数

时间:2011-06-29 18:01:53

标签: mysql decimal

在MySQL中,我将DECIMAL字段设置为10,10。但是,每当我输入新值时,它都会显示0.9999999999。我需要更改以接受逗号后的任何数字,精度为10位数?由于某种原因,它确实可以使用10,6。

PS:我想插入汇率。

3 个答案:

答案 0 :(得分:25)

第一个数字是要存储的总位数,第二个数字是小数部分的位数。因此DECIMAL (10, 10)仅适用于10个小数位数。您可以使用DECIMAL (20, 10)之类的内容在积分和小数部分上使用10位数字。

答案 1 :(得分:10)

DECIMAL(10,10)表示小数点前的值没有小数位。你限制的事情始终是x < 1

这是DECIMAL(total number of digits, digits after the decimal)。使用10,10,您会说“十进制后的10位数字”,在小数点前留下10-10 = 0。这意味着您不能存储1,而0.9999999999是最接近您的字段定义的值。

答案 2 :(得分:6)

来自@ Xint0的答案是正确的。您已将精度和比例设置为相同的位数,因此您只能插入小于1.0的值。

正在发生的另一件事是,如果MySQL不符合列的数据类型,则会截断值的默认行为。

mysql> CREATE TABLE foo (dec DECIMAL(10,10));
mysql> INSERT INTO foo VALUES (1.0);
Query OK, 1 row affected, 1 warning (0.00 sec)

注意这会产生警告。

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------+
| Level   | Code | Message                                      |
+---------+------+----------------------------------------------+
| Warning | 1264 | Out of range value for column 'dec' at row 1 |
+---------+------+----------------------------------------------+

mysql> SELECT * FROM foo;
+--------------+
| dec          |
+--------------+
| 0.9999999999 |
+--------------+

您可以使用严格的SQL模式将警告变为错误:

mysql> SET SQL_MODE = STRICT_ALL_TABLES;
mysql> INSERT INTO foo VALUES (1.0);
ERROR 1264 (22003): Out of range value for column 'dec' at row 1