Php Sqlite3最大主键值
我有一个带有整数主键的表,不能将大于2147483647的值作为键插入。是否有可能以某种方式增加该值 更新: 好的,我有php脚本: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
<?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