SQLite整数数据类型如int,integer,bigint等有什么区别?

时间:2011-09-07 17:16:57

标签: sqlite

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

INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
未签名的大INT INT2
INT8

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

我发现整数数据大小现在有点令人困惑,例如INTEGER可以存储多达64位的有符号整数,但是值可能只占用磁盘上的32位。

只有当存储的值小于int32 max值时,才会在INTEGER列上调用sqlite3_column_int,如果更高,它将如何表现?

1 个答案:

答案 0 :(得分:53)

从SQLite3文档:

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

  

大多数SQL数据库引擎(除了以外的每个SQL数据库引擎)   据我们所知,SQLite使用静态,严格的类型。随着静态   输入时,值的数据类型由其容器确定 -   存储值的特定列。

     

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

所以在MS Sql Server中(例如),“int”==“整数”== 4个字节/ 32位。

相比之下,SqlLite“整数”可以容纳你输入的内容:从1字节字符到8字节长字符。

上面的链接列出了所有类型,并提供了有关Sqlite“affinity”的更多详细信息。

您所指的C / C ++接口必须使用强类型语言。

所以有两个API:sqlite3_column_int(),最多4个字节;和sqlite3_column_int64()

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