我有一个带有整数主键的表,我不能插入大于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();
?>我在测试数据库中得到的结果是:
root@localhost:~# sqlite3 test
SQLite version 3.7.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from test;
1111111111
-2072745074
-961633963
149477148
1260588259
-1923267926
-812156815所以我的问题是:如何从php向sqlite数据库插入大值?
UPDATE2:
我已将每个主体更改为:
$sqlite_db->exec("INSERT INTO test (n) VALUES ({$n})");现在它工作正常了。
发布于 2011-10-16 20:17:59
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的无类型的一个例外是类型为整数主键的列。(并且您必须使用"INTEGER“而不是"INT”。INT PRIMARY KEY类型的列和其他列一样是无类型的。)integer主键列必须包含32位有符号整数。任何插入非整数数据的尝试都将导致错误。
整型主键列可用于实现AUTOINCREMENT等效项。如果您尝试将NULL插入到整数主键列中,则该列实际上将由一个比表中已有的最大键大1的整数填充。或者,如果最大的键是2147483647,那么该列将由一个随机整数填充。无论采用哪种方法,都将为整数主键列分配一个唯一的整数。您可以使用sqlite_last_insert_rowid() API函数或在后续SELECT语句中使用last_insert_rowid() SQL函数来检索这个整数。
从SQLite版本3开始,支持2、4、6或8字节的整数,行id为64位。
所以如果你的版本低于3,答案是,不,你对此无能为力。
https://stackoverflow.com/questions/7784143
复制相似问题