SQLite数据类型

Man*_*lva 18 java sqlite

我通过Zentus在Java应用程序中使用SQLite.在这种情况下,我需要在我的数据库中保存和查询Java 值.来自其他RDBMS我创建了如下表来存储长值:long

CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
Run Code Online (Sandbox Code Playgroud)

此解决方案产生例外行为,但在阅读关于数据类型SQLite文档后,我理解我的LONG类型与使用TEXT=> 相同的效果longValue存储为文本.

然后,我决定将其更改为INTEGER(长度是可变的,并且可以存储多达64位的整数,这是Java长度的长度),以便拥有更清晰的代码,可能是为了节省一些磁盘空间并提高性能,因为我的longValues是插入和查询为long.

在比较创建的数据库的性能和大小后,我无法看到以下任何区别:

CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue INTEGER)
Run Code Online (Sandbox Code Playgroud)

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

Tan*_*128 22

在SQLite中,数据类型是每值,而不是每列.因此,当您插入整数时,无论列类型如何,它们都将存储为整数.

  • 列具有"亲和力"; 例如,传递数字字符串的文本列应将其存储为文本,保留格式(小数位等).传递数字字符串的数字列将在存储之前将其转换为数字,因此"10.00"稍后将返回为"10".由于LONG列具有默认的数字亲缘关系,因此将类型更改为INTEGER不会更改任何内容. (9认同)
  • 因此我想知道:为什么列类型存在? (4认同)
  • SQLite不承认LONG,但数据类型文档中的2.1节说明无法识别的类型默认为numeric. (4认同)
  • SQlite网站的答案是:"为了最大化SQLite与其他数据库引擎之间的兼容性,SQLite支持列上"类型亲和力"的概念.列的类型亲和性是存储在该列中的数据的推荐类型.这里的重要思想是建议使用类型,而不是必需的.任何列仍然可以存储任何类型的数据.只是某些列,在给定选择的情况下,更愿意使用一个存储类而不是另一个"但是什么"会更喜欢"意思是?? 对性能和数据库大小有影响吗? (3认同)

Chr*_*oom 8

SQLite自动选择正确的大小.来自http://www.sqlite.org/datatype3.html:

整数.该值是有符号整数,存储为1,2,3,4,6或8个字节,具体取决于值的大小.

SQLite使用动态类型,无架构.


dan*_*n04 7

在查看创建的数据库的性能和大小后,我无法看到以下任何区别:

目前没有任何区别.INTEGER具有整数亲和性,LONG具有数字亲和性.并且,http://www.sqlite.org/datatype3.html说:

使用INTEGER关联的列与具有NUMERIC关联的列的行为相同.INTEGER和NUMERIC亲和力之间的差异仅在CAST表达式中很明显.