我有一个sqlite表-地址如下:
+-----------------------------+
| appid | BIGINT (20) |
| address | CHAR(300) |
| addr_id | BIGINT(11) |
+-----------------------------+
然而,当我试图在appid中保存数据时,我得到了类似9.0916073007e+18
的东西。我尝试使用real
,但也没有工作。
我该如何解决这个问题?
编辑:$qry = "select * from addresses WHERE id = 18";
$result = $db->query($qry);
while($row = $result->fetchArray(SQLITE3_ASSOC) ){
var_dump($row['appid']); // float(9.0916073007e+18)
}
SQLite支持有符号的64位整数,即值不超过9223372036854775807:
<>之前create table (x)insert into t values(9223372036854775807);select * from t;9223372036854775807之前但是,PHP文档说:
整数的大小与平台有关,尽管通常值的最大值约为20亿(即32位带符号)。64位平台的最大值通常约为9E18,除了PHP 7之前的Windows,它总是32位。
[…]
如果PHP遇到超出整型界限的数字,它将被解释为浮点数。
所以你必须升级到最新的64位PHP版本。或者将值作为字符串处理。