Обновление с типом float в MySQL - PullRequest
3 голосов
/ 30 ноября 2011

Я пытаюсь выполнить простой запрос на обновление в MySQL, но он не работает:

UPDATE dimensions
SET is_active = 1
WHERE eco_tax = 19.2;

eco_tax - это столбец типа FLOAT, и кажется, что здесь проблема, потому что, когда я пытаюсьобновление с помощью столбца INT работает.

Итак, что я могу сделать, чтобы использовать float в столбце в моем синтаксисе where в MySQL?

Ответы [ 4 ]

4 голосов
/ 30 ноября 2011

Я всегда сталкиваюсь с проблемами, когда я хочу сделать WHERE s в базах данных, и, скорее всего, это проблема математики с плавающей запятой.Я знаю, что дубли работают одинаково, но по какой-то странной причине они всегда работают с использованием двойников.Поэтому я предлагаю вам изменить тип данных на удвоенный.

1 голос
/ 28 марта 2012

попытайтесь изменить столбец на DECIMAL(x,y). У меня была такая же проблема, и я обнаружил, что она возникает только в строках, когда в предложении where используется плавающее значение; Я изменил тип столбца с FLOAT на DECIMAL(5,2) (конечно, выберите масштаб и точность) и ... больше никаких проблем!.

1 голос
/ 30 ноября 2011

Корень этой проблемы в том, что некоторые числа не могут быть представлены точно в плавающей запятой. Вы можете попробовать что-то вроде следующего (к сожалению, у меня нет доступа к экземпляру MySQL, чтобы попробовать это самостоятельно):

UPDATE dimensions
SET is_active = 1
WHERE ABS(eco_tax - 19.2) < 1E-08;

Другими словами, обновите, если разница между двумя значениями незначительна.

1 голос
/ 30 ноября 2011

Используйте double вместо float. Кажется, там есть ошибка mySql. См. Следующую ссылку для получения дополнительной информации.

http://bugs.mysql.com/bug.php?id=14268

...