2012-02-29 2 views
1

Я разрабатываю модуль чата с JavaScript и php + mysql, и я храню данные чата в простой таблице с помощью: id, member1, member2, message, timestamp. Столбец timestampdouble (14,4), где я храню отметку времени на микросекундах, например: 1330522898.3137;Ошибка сравнения двойного типа MySQL

Моей проблема: Когда я сравниваю эту метку время с другой, как

SELECT * FROM chat_rows WHERE timestamp >= 1330535168.9548 

только на конкретных номерах, как этот выше, я получаю 0 строк с помощью оператора >= хотя у меня есть строка с точное значение; Это подтверждается почти тот же запрос дифференцированной оператором =:

SELECT * FROM chat_rows WHERE timestamp = 1330535168.9548 

который возвращает одну строку;

Обходной путь для этого заключается в замене двойного (14,4) типа на varchar, но медленнее, чем double;

терпит неудачу Также только на этом сервере (мое развитие один): Apache/2.2.20 (Ubuntu) MySQL версии клиента: 5.1.58

На мой местный, кажется, что работает; - что такое Windows Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/0.9.8o Versiunea clientului MySQL: mysqlnd 5.0.8-DEV - 20102224 - $ Revision: 318113 $

Любые мысли?

Заранее благодарен!

+2

Не можешь использовать 'десятичного (14,4)'? – a1ex07

+0

Если вы примените его к строке, то сравните строки, она должна работать. Проблема в том, что 14,4 - это размер дисплея, но значение и сравнение выходят за рамки этого. Альтернативой является использование десятичного числа. –

+0

Спасибо за помощь, это действительно сработало; Я все еще не понимал, почему это происходит, если у меня есть 14,4 двойных значения, и я сравниваю их с одним и тем же числом, почему сравнение должно идти дальше? –

ответ

1

Правильный способ сравнения чисел с плавающей запятой состоит в том, чтобы сначала принять приемлемый допуск для различий между числами, а затем выполнить сравнение с допустимым значением.

MySQL floating point comparison issues

+0

Спасибо, у меня есть это сейчас. –

Смежные вопросы