我通过SQLite在Java应用程序中使用Zentus。在此上下文中,我需要在数据库中保存和查询Java long
值。来自其他RDBMS我创建了如下表来存储长值:
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
此解决方案产生例外行为,但在阅读SQLite documentation on data types后,我了解到我的LONG
类型与使用TEXT
=>相同的效果longValue
以文字形式存储。
然后我决定将其更改为INTEGER
(长度是可变的并且可以存储多达64位的整数,这是Java long的长度),以便拥有更清晰的代码并可能节省一些磁盘空间并且因为我的longValues被插入并查询为long
而增加了性能。
在比较所创建数据库的性能和大小后,我无法看到:
之间存在任何差异CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
和
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue INTEGER)
有关该主题的任何评论,经验或感受?
答案 0 :(得分:22)
在SQLite中,数据类型是每个值,而不是每列。因此,当您插入整数时,无论列类型如何,它们都将存储为整数。
答案 1 :(得分:8)
SQLite自动选择正确的大小。来自http://www.sqlite.org/datatype3.html:
INTEGER。该值是有符号整数,以1个,2个,3个,4个,6个或8个字节存储 取决于价值的大小。
SQLite使用动态类型,并且没有架构。
答案 2 :(得分:7)
看完表演和大小后 我无法创建的数据库 看看之间有什么区别:
不是有任何区别。 INTEGER具有整数亲和性,LONG具有数字亲和性。并且,http://www.sqlite.org/datatype3.html说:
使用INTEGER亲缘关系的列 行为与列相同 NUMERIC亲和力。区别 在INTEGER和NUMERIC亲和力之间 仅在CAST表达式中显而易见。
答案 3 :(得分:2)
CREATE TABLE ex2(
a VARCHAR(10),
b NVARCHAR(15),
c TEXT,
d INTEGER,
e FLOAT,
f BOOLEAN,
g CLOB,
h BLOB,
i TIMESTAMP,
j NUMERIC(10,5)
k VARYING CHARACTER (24),
l NATIONAL VARYING CHARACTER(16)
);