Я никогда не видел такого поведения с SQLite3.Отредактируйте свой вопрос и вставьте вывод .schema your-table-name
.Кроме того, убедитесь, что проблема не в коде вашего приложения.
Объявление столбца как целого в SQLite работает иначе, чем объявление столбца как целого в истинном дБм SQL.В SQLite3 любой столбец, объявленный INTEGER PRIMARY KEY
, должен принимать любое 64-разрядное целое число со знаком.Максимальное число 64-битных чисел - 1,84467441 × 10 19 .(Ваш столбец также должен принимать отрицательные целые числа.)
INTEGER.Значение представляет собой целое число со знаком, сохраняемое в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения.
sqlite> create table t ( n integer primary key, s varchar(35));
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
Таким образом, оно автоматически увеличивается.,.
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
И он увеличивает за максимальное значение 32-целое число со знаком в битах.
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
Принимает значения в диапазоне 2 33 .
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
И продолжает автоматически увеличивать.