Php Sqlite3最大主键值

Php Sqlite3最大主键值,php,sqlite,Php,Sqlite,我有一个带有整数主键的表,不能将大于2147483647的值作为键插入。是否有可能以某种方式增加该值 更新: 好的,我有php脚本: <?php $sqlite_db = new SQLite3('test'); $sqlite_db->exec('CREATE TABLE test (n UNSIGNED INTEGER)'); $ns = array(1111111111,2222222222,3333333333,4444444444,5555555555,66666666

我有一个带有整数主键的表,不能将大于2147483647的值作为键插入。是否有可能以某种方式增加该值

更新: 好的,我有php脚本:

<?php

$sqlite_db = new SQLite3('test');
$sqlite_db->exec('CREATE TABLE test (n UNSIGNED INTEGER)');

$ns = array(1111111111,2222222222,3333333333,4444444444,5555555555,6666666666,7777777777);

foreach ($ns as $n)
{
    $statement = $sqlite_db->prepare('INSERT INTO test (n) VALUES (:n)');
    $statement->bindValue(':n', $n, SQLITE3_INTEGER);
    $statement->execute();
}

$sqlite_db->close();
?>
所以我的问题是:如何从php向sqlite数据库插入大值

更新2:

我已将每个机构的名称更改为:

$sqlite_db->exec("INSERT INTO test (n) VALUES ({$n})");

现在它工作正常。

2147483647是整数的最大值,这意味着更大的数字将无法放入其中,因为它没有空间

整数通常用4个字节(32位)表示,其中最后一位是sing

    31                  15                0
    0000 0000 0000 0000 0000 0000 0000 0000 = 0 

    0111 1111 1111 1111 1111 1111 1111 1111 = +2147483647  

    1111 1111 1111 1111 1111 1111 1111 1111 = -2147483647  
从文件中:

SQLite无类型的一个例外是类型为的列 整数主键。(并且必须使用“整型”而不是“整型”。列 INT类型的主键与任何其他类型的整型键一样是无类型的。) 主键列必须包含32位有符号整数。任何尝试 插入非整数数据将导致错误

整数主键列可用于实现 自动递增。如果您试图在整数主键中插入NULL 列中,该列实际上将填充一个1的整数 大于表中已存在的最大键。或者如果最大的 键为2147483647,则该列将填充随机字符 整数。无论哪种方式,整数主键列都将被分配一个 唯一整数。可以使用 sqlite_last_insert_rowid()API函数或使用 在后续SELECT语句中插入最后一个\u rowid()SQL函数

从版本3开始,SQLite支持2、4、6或8字节的整数,行id为64位


因此,如果您的版本小于3,那么答案是,不,您对此无能为力。

我从未见过SQLite3的这种行为。编辑您的问题,并将
的输出粘贴到您的表名中。另外,确保问题不在应用程序代码中

与在真正的SQL dbms中将列声明为整数不同。在SQLite3中,任何声明为
整数主键的列
都应该接受任何64位带符号整数。64位整数的最大值为1.84467441×1019。(列也应接受负整数。)

整数。该值是一个有符号整数,存储在1、2、3、4、6或8中 字节,具体取决于值的大小

所以,它会自动增加

sqlite> insert into t values (2147483647, 'a');
sqlite> select * from t;
1|a
2|a
3|a
2147483647|a
它接受32位有符号整数的最大值

sqlite> insert into t (s) values ('a');
sqlite> insert into t (s) values ('a');
sqlite> insert into t (s) values ('a');
sqlite> select * from t;
1|a
2|a
3|a
2147483647|a
2147483648|a
2147483649|a
2147483650|a
sqlite> insert into t values (8589934592, 'a');
sqlite> select * from t;
1|a
2|a
3|a
2147483647|a
2147483648|a
2147483649|a
2147483650|a
8589934592|a
它的增量超过32位有符号整数的最大值

sqlite> insert into t (s) values ('a');
sqlite> insert into t (s) values ('a');
sqlite> insert into t (s) values ('a');
sqlite> select * from t;
1|a
2|a
3|a
2147483647|a
2147483648|a
2147483649|a
2147483650|a
sqlite> insert into t values (8589934592, 'a');
sqlite> select * from t;
1|a
2|a
3|a
2147483647|a
2147483648|a
2147483649|a
2147483650|a
8589934592|a
它接受范围为233的值


它会继续自动递增。

竖起拇指指出Sqlite3中的变化。参考文献是
sqlite> insert into t (s) values ('a');
sqlite> select * from t;
1|a
2|a
3|a
2147483647|a
2147483648|a
2147483649|a
2147483650|a
8589934592|a
8589934593|a