首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlite3最大主键值

Sqlite3最大主键值
EN

Stack Overflow用户
提问于 2011-10-16 20:06:42
回答 1查看 3.8K关注 0票数 0

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

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

代码语言:javascript
复制
<?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();
?>

我在测试数据库中得到的结果是:

代码语言:javascript
复制
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:

我已将每个主体更改为:

代码语言:javascript
复制
$sqlite_db->exec("INSERT INTO test (n) VALUES ({$n})");

现在它工作正常了。

EN

回答 1

Stack Overflow用户

发布于 2011-10-16 20:17:59

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

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

代码语言:javascript
复制
    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函数来检索这个整数。

source

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

所以如果你的版本低于3,答案是,不,你对此无能为力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7784143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档