SQLite数据类型

时间:2010-08-02 13:13:59

标签: java sqlite

我通过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)

有关该主题的任何评论,经验或感受?

4 个答案:

答案 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)
);