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

lab*_*att 30 mysql sql

我在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    |                | 
+---------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

当我插入这样的东西和选择:

mysql> insert into testtable (firstname, lastname, justsomenum) values ("Lloyd", "Christmas", 83.5);
Run Code Online (Sandbox Code Playgroud)

我选择时得到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)
Run Code Online (Sandbox Code Playgroud)

这是Mac OS X 10.5.8上的MySQL 5.0.86.

有任何想法吗?谢谢.

rec*_*ive 58

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

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

  • 感谢您的帮助。我取 decimal(m,d) 表示无论值如何,我都可以在小数点左边有 m 位,在小数点右边有 d 位。 (2认同)

sim*_*amp 18

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

MySQL的开发者已经因为改变它,以便所述第一属性(在这种情况下,"3")是一个整数的小数完整数(9.99为三个数字),并且所述第二属性(在这种情况下,"2")保持不变 - 小数位数.

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

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