2013-06-08 2 views
2

В моем сервлете Java я генерирую 64-битное целое число каждый раз, когда выполняется определенный запрос. тогда я посылаю это долго в двух направлениях:Почему мой длинный целое меняет крошечный бит?

1) как JSON-закодирован ответ на HTTP Get Вызывающий

2) в базу данных MySQL через PHP скрипт

1) работает следующим образом: число добавляется в ArrayList (через Long.toString()). Затем этот список преобразуется в строку JSON через библиотеку Gson. Затем он печатается с помощью printwriter ответа HTTP.

2) запускает скрипт PHP с длинным параметром, переданным в качестве параметра командной строки. Затем этот параметр считывается и подается в запрос SQL INSERT INTO.

В конце концов, эти два номера отличаются друг от друга. В последнем примере, я получаю следующее:

1) -753774083758266880

2) -753774083758266887

Что мне не хватает?

+0

Вы отлаживали различные шаги? Когда это меняется? – namero999

+0

Не могли бы вы определить, где именно происходит изменение? – fge

+0

Я пытаюсь выяснить, как отлаживать это правильно. Скорее всего, скоро что-то будет создано. –

ответ

0

Это не ответ, но слишком длинный комментарий.

MySQL говорит, что bigint поддерживает значения от -9223372036854775808.

Однако, следующий код на SQLFiddle:

select cast('-753774083758266880' as signed), 
     cast('-753774083758266887' as signed), 
     cast('-9223372036854775807' as signed) 

Возвращает:

-753774083758266900 -753774083758266900 -9223372036854776000 

Возможно, поддержка очень больших значений (положительных или отрицательных) должен быть квалифицирован. Или, возможно, это артефакт того, как такие числа печатаются на выходе и не имеют ничего общего с вашей проблемой.

В качестве примечания: он правильно учитывает эти значения, поэтому это, пожалуй, только проблема с выпуском.

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