只是为了澄清列类型,除了一个例外,在很大程度上无关紧要,因为任何类型的数据都可以存储在任何类型的列中。
- 例外是 rowid 列或 rowid 列的别名,这样的列必须存储一个整数。整数是一个 64 位有符号整数,因此包含一个 java long。
列类型本身也很灵活,例如CREATE TABLE mytable (mycolumn a_pretty_weird_column_type) 是有效的(LONG 也是如此)。此类类型根据 5 条规则转换为列亲和性。
将以上内容放在一起,使用:-
CREATE TABLE IF NOT EXISTS mytable (mycolumn a_pretty_weird_column_type);
DELETE FROM mytable;
INSERT INTO mytable VALUES
(1549251913000),
(999999999999999),('Fred'),(x'010203040506070809'),(0.234567),(null),
('999999999999999'), -- Note although specified as TEXT as mycolumn is effectively NUMERIC stored as INTEGER
('0.234567') -- As above but stored as REAL
;
SELECT
*,
typeof(mycolumn) AS coltype, -- The column type (note as per value not column definition)
hex(mycolumn) AS as_hex, -- Convert column to a hex representation of the data
CAST(mycolumn AS TEXT) AS as_text, -- follow rules
CAST(mycolumn AS INTEGER) AS as_integer,
CAST(mycolumn AS REAL) AS as_real,
CAST(mycolumn AS NUMERIC) AS as_numeric,
CAST(mycolumn AS BLOB) AS as_blob
FROM mytable;
结果:-
圣经本身就是Datatypes In SQLite Version 3。
但是当我取值时,它与我的预期不符。它
变成这样-1231280856
问题
因此,您的问题与列类型无关,与 SQLite 本身无关,而是由于使用 Cursor getInt 方法而不是 getLong 方法.
一个回答说,
在 sqlite 中以文本形式存储日期和时间总是更好。
这是不正确的,从空间的角度来看,因此使用数字表示的基本效率,即日期和时间的 64 位有符号整数 SQL As Understood By SQLite - Date And Time Functions - Time Strings(最多 8 个字节)将更有效而不是存储 19 个字节(精确到一秒)。