最近、私にとって少し奇妙なバグがあります。FLOAT(8、3)の列を持つテーブルがあると考えてみましょう。また、Webブラウザからアクセスできる検証済みのテーブルエディタがあると考えてみましょう。テーブルエディタは、すべての列のクライアント側の検証をサポートし、単純なJavaScript正規表現を使用して列タイプで指定された範囲内にないfloatを配置することはできません。
var rx = new RegExp("^\\d{1," + (total - precision) + "}(\\.\\d{1," + precision + "})?$");
簡単に表す:
^\d{1,5}(\.\d{1,3})?$
FLOAT(8、3)の場合。ユーザーはそのセルに99999.999を簡単に入力でき、変更を保存すると、セルに100000を取得します。これは、テーブルの列の制約に対して無効な精度が失われた値です。バリデーターの正規表現を拡張して100000を渡そうとしましたが、この値をDBに保存できません。うわー... 「行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(理想的には最大値)をトリミングまたは調整できるようにする簡単な回避策はありますか?
前もって感謝します。