MySQL中的十进制(3,2)值始终为9.99

时间:2009-10-06 01:16:26

标签: sql mysql

我在MySQL中有一个类型为decimal(3,2)的字段,当我插入像78.3这样的东西时,似乎总是有9.99的值。为什么呢?

这就是我的表格:

mysql> describe testtable;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment | 
| firstname     | varchar(20)  | YES  |     | NULL    |                | 
| lastname      | varchar(20)  | YES  |     | NULL    |                | 
| justsomenum   | decimal(3,2) | YES  |     | NULL    |                | 
+---------------+--------------+------+-----+---------+----------------+

当我插入类似这样的内容时,选择:

mysql> insert into testtable (firstname, lastname, justsomenum) values ("Lloyd", "Christmas", 83.5);

当我选择时,我得到9.99。

mysql> select * from testtable;
+----+-----------+-----------+---------------+
| id | firstname | lastname  | justsomenum   |
+----+-----------+-----------+---------------+
|  1 | Shooter   | McGavin   |          9.99 | 
|  2 | Lloyd     | Christmas |          9.99 | 
|  3 | Lloyd     | Christmas |          9.99 | 
|  4 | Lloyd     | Christmas |          9.99 | 
+----+-----------+-----------+---------------+
4 rows in set (0.00 sec)

这是Mac OS X 10.5.8上的MySQL 5.0.86。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:55)

decimal(3, 2)的最大值为9.99,因此当您尝试插入大于该值的内容时,其上限为9.99。如果您想存储更大的数字,请尝试使用decimal(5, 2)或其他内容。

第一个参数是精度的总位数,第二个参数是小数点后的位数。

答案 1 :(得分:17)

在旧版本中,MySQL DECIMAL(3,2)表示DP左侧有3个整数,右侧表示2个。

MySQL开发人员已经改变了它,所以第一个属性(在这种情况下为'3')是十进制中的完整整数数(9.99是三个数),第二个属性(在这种情况下为'2')保持不变 - 小数位数。

这有点令人困惑。基本上,对于DECIMAL字段,在DP需要添加之前,您想要的任何数量的整数都是DP之后想要的任意数量的整数并设置为第一个选项。

然后就像已经说过的那样,如果你试图输入一个大于该字段最大值的数字,MySQL会为你修剪它。这里的问题是你的MySQL配置。我会详细介绍这个on my blog