2

在我的 Java servlet 中,每次发出某个请求时,我都会生成一个 64 位整数。然后我将这个长发送到两个方向:

1) 作为对 HTTP Get 调用者的 JSON 编码回复

2) 通过 PHP 脚本进入 MySQL 数据库

1) 像这样工作:数字被添加到 ArrayList(通过 Long.toString())。然后通过 Gson 库将此列表转换为 JSON 字符串。然后它被 HTTP 响应的打印器打印出来。

2) 运行 PHP 脚本,将 long 参数作为命令行参数传递。然后读取此参数并将其输入到 SQL INSERT INTO 查询中。

最后,这两个数字略有不同。在最后一个示例中,我得到以下信息:

1)-753774083758266880

2)-753774083758266887

我错过了什么?

4

1 回答 1

0

这不是答案,但评论太长了。

MySQL 表示bigint支持来自-9223372036854775808.

但是, SQLFiddle上的以下代码:

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

回报:

-753774083758266900 -753774083758266900 -9223372036854776000

也许需要对真正大值(正或负)的支持进行限定。或者,也许这是这些数字如何在输出中打印的伪影,与您的问题无关。

注意:它确实正确地采用了这些值的差异,所以这可能只是一个输出问题。

于 2013-06-08T19:14:01.563 回答