INTEGER, как он говорит, может быть до 8 байтов, то есть 64-битное целое число со знаком . Ваша проблема не в том, что SQLite может хранить 32-битные значения, не относящиеся к проблеме 2038. Ваша проблема заключается в получении времени от чего-то, что не является предметом проблемы, то есть, если вы не пытаетесь защитить от проблемы 292,277,026,596 года.
Нет необходимости использовать BLOB и дополнительную сложностьи дополнительная обработка преобразования между BLOB и временем.
Может даже случиться так, что вы можете использовать сам SQLite для извлечения подходящих значений, если вы хотите сохранить текущее время или время, основанное на текущем времени, то есть now .
Возможно, рассмотрим следующее: -
DROP TABLE IF EXISTS timevalues;
/* Create the table with 1 column with a weird type and a default value as now (seconds since Jan 1st 1970)*/
CREATE TABLE IF NOT EXISTS timevalues (dt typedoesnotmatterthtamuch DEFAULT (strftime('%s','now')));
/* INSERT 2 rows with dates of 1000 years from now */
INSERT INTO timevalues VALUES
(strftime('%s','now','+1000 years')),
((julianday('now','+1000 years') - 2440587.5)*86400.0);
/* INSERT a row using the DEFAULT */
INSERT INTO timevalues (rowid) /* specify the rowid column so there is no need to supply value for the dt column */
VALUES ((SELECT count() FROM timevalues)+1 /* get the highest rowid + 1 */);
/* Retrieve the data rowid, the value as stored in the dt column and the dt column converted to a user friendly format */
SELECT rowid,*, datetime(dt,'unixepoch') AS userfriendly FROM timevalues;
/* Cleanup the Environment */
DROP TABLE IF EXISTS timevalues;
Что приводит к: -
- Возможно, вы захотите прочитать Функции даты и времени , например, strftime , julianday и сейчас
- rowid - это специальный обычно скрытый столбец, который существует для всей таблицы, если только он не является таблицей ROWID. Как правило, он не будет использоваться, или если так псевдоним используется INTEGER PRIMARY KEY
- см. SQLite Autoincrement , чтобы узнать о rowid и его псевдониме, и почему бы неиспользуйте AUTOINCREMENT.
- тип столбца typedoesnotmatterthtamuch см. типы данных в SQLite версии 3 , почему это может быть.