SQLite整数数据类型int、integer、bigint等有何区别?

72

sqlite中整数数据类型有什么区别?

INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8

其中哪个可以存储32位整数,哪个可以存储64位值?是否支持128位?

我现在对整数数据大小感到有些困惑,例如INTEGER 可以存储64位的有符号整数,但是在磁盘上的值可能只占用32位。

当在一个INTEGER列中调用sqlite3_column_int时,只有存储的值小于int32的最大值时才能正常工作,那么如果大于int32的最大值会怎样呢?


2
超集:https://dev59.com/znE85IYBdhLWcg3wejVO - Ciro Santilli OurBigBook.com
1个回答

71

根据SQLite3文档:

http://www.sqlite.org/datatype3.html

大多数SQL数据库引擎(除了SQLite之外,据我们所知)都使用静态、固定的类型。在静态类型中,一个值的数据类型由其容器——存储该值的特定列——确定。

SQLite使用更通用的动态类型系统。在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联。SQLite的动态类型系统与其他数据库引擎中更常见的静态类型系统向后兼容,因此在静态类型数据库上工作的SQL语句应该在SQLite中以相同的方式工作。但是,SQLite中的动态类型使其能够做一些在传统的严格类型的数据库中不可能实现的事情。

例如,在MS Sql Server中,“int” == “integer” == 4字节/32位。

相比之下,在SqlLite中,“integer”可以保存任何你放入其中的东西:从1字节char到8字节long long。

上面的链接列出了所有类型,并提供了有关Sqlite“亲和力”的更多细节。

你提到的C/C++接口必须适用于强类型语言。

因此,有两个API:sqlite3_column_int(),最大为4字节;和sqlite3_column_int64()

http://www.sqlite.org/capi3ref.html#sqlite3_int64


58
请注意,确切的类型名称仅在自增列中起作用:这些必须是INTEGER(并且是PRIMARY KEY),而不仅仅是INT - dan04

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接