我在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。
有什么想法吗?感谢。
答案 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。