Недавно я получил ошибку, которая несколько странная для меня.Будем считать, что у нас есть таблица со столбцом 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, но это значение нельзя сохранить в БД.Ух ... Это ожидалось из-за "Значение вне диапазона для столбца 'COLUMN' в строке N" , но я не ожидал, что консоль 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
)?Или есть какие-нибудь быстрые обходные пути, позволяющие установить 100000 (в идеале максимальное значение), обрезанных или отрегулированных драйвером JDBC?
Заранее спасибо.