Драйвер JDBC MySQL и тип столбца FLOAT (N, M) - PullRequest
1 голос
/ 24 сентября 2010

Недавно я получил ошибку, которая несколько странная для меня.Будем считать, что у нас есть таблица со столбцом 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?

Заранее спасибо.

1 Ответ

1 голос
/ 25 сентября 2010

Звучит так, как будто вы обжечетесь при округлении.

Что произойдет, если вы сделаете столбец таблицы 9,3 или 10,3 вместо 8,3? Не изменяйте код проверки, только столбец def.

Можете ли вы использовать целочисленный столбец с предполагаемой десятичной точкой? То есть 1 будет храниться как 1000. 3.221 будет храниться как 3221. Вам нужно знать, чтобы разделить на 1000, прежде чем отображать число.

Здесь обсуждается проблема с MySQL Float .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...