BIGINT改为指数型


BIGINT changed to exponential

我有一个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版本。或者将值作为字符串处理。