【发布时间】:2011-04-16 21:13:35
【问题描述】:
我最近遇到了一个对我来说有点奇怪的错误。假设我们有一个包含 FLOAT(8, 3) 列的表。让我们也考虑一下我们有一个可通过网络浏览器访问的经过验证的表格编辑器。表格编辑器支持对每一列进行客户端验证,并且不允许使用简单的 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(理想情况下是最大值)?
提前致谢。
【问题讨论】:
标签: java mysql jdbc mysql-connector