最简单改法
注释掉 mysql.lua 第50行
converters[0x08] = tonumber -- long long
On Thursday, July 19, 2012 11:19:35 PM UTC-7, Lance Li wrote:
hi 各位,
这个问题事实上是一个lua相关问题,但因为使用 lua-resty-mysql 之类的库操作数据库时,这样的问题很有可能碰到,所以我发在这里。
lua内部的number类型似乎是32bit精度的,在处理长整型数据的时候可能会有精度损失,这个问题在与id或hash有关时会影响非常严重,比如:
local n = 134276312585058
print(n)
输出结果 1.3427631258506e+14
当使用 lua-resty-mysql 操作数据库时,如果数据类型是长整型的,数字将自动转化为科学计数法表示,比如上面的数据就损失了一位精度。
直接修改lua编译配置文件据说比较容易解决这个问题,但似乎比较麻烦,又缺乏一些通用性。
我的想法是在 lua-resty-mysql 库里,如果检测出返回结果是数字类型并大于精确显示的边界时,按字符串的方式去解析处理,agnetzh 你看呢?
Lance