MySQL JDBC驱动程序& FLOAT(N,M)列类型

时间:2010-09-24 16:22:27

标签: java mysql jdbc mysql-connector

我最近遇到了一个对我来说有些奇怪的错误。让我们考虑一下我们有一个FLOAT(8,3)列的表。我们还考虑通过Web浏览器访问经过验证的表格编辑器。表编辑器支持每列的客户端验证,并且不允许使用简单的JavaScript正则表达式放置不在列类型指定的范围内的浮点数,例如:

var rx = new RegExp("^\\d{1," + (total - precision) + "}(\\.\\d{1," + precision + "})?$");

简单地表示:

^\d{1,5}(\.\d{1,3})?$

对于FLOAT(8,3)。用户可以轻松地将99999.999输入到该单元格中,当他保存更改时,他在单元格中获得100000 - 精度损失的值对于表格列约束无效。我试图扩展验证器正则表达式以传递100000,但此值不能保存到数据库中。哇...这是因为“第N行的列'COLUMN'超出范围值”,但我没想到MySQL控制台(没有显示警告)和SQLyog(显示警告)将允许以下UPDATE查询:

UPDATE TABLE SET COLUMN = 100000; /* No matter it's out of range for FLOAT(8, 3), it's trimmed but not via JDBC MySQL driver*/

显然这是MySQL连接器特定的问题。这是MySQL连接器的错误(目前我使用mysql-connector-java-5.1.12-bin.jar)?或者是否有任何快速的解决方法允许通过JDBC驱动程序调整或调整100000(理想情况下是最大值)?

提前致谢。

1 个答案:

答案 0 :(得分:1)

听起来你被四舍五入烧伤了。

如果您将表格列9,3或10,3而不是8,3,会发生什么?请勿更改验证码,只需更改列def。

您可以使用带有假定小数点的整数列吗?也就是说,1将被存储为1000. 3.221将被存储为3221.在显示数字之前,您必须知道除以1000.

此处讨论problems with MySQL Float

相关问题