大佬教程收集整理的这篇文章主要介绍了SQLite数据类型详解,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一、存储种类和数据类型:
1. 布尔数据类型:
sqlite并没有提供专门的布尔存储类型,取而代之的是存储整型1表示true,0表示false。
2. 日期和时间数据类型:
和布尔类型一样,sqlite也同样没有提供专门的日期时间存储类型,而是以TEXT、REAL和IntegeR类型分别不同的格式表示该类型,如:
二、类型亲缘性:
为了最大化sqlite和其它数据库引擎之间的数据类型兼容性,sqlite提出了"类型亲缘性(Type Affinity)"的概念。我们可以这样理解"类型亲缘性 ",在表字段被声明之后,sqlite都会根据该字段声明时的类型为其选择一种亲缘类型,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式,除非亲缘类型不匹配或无法转换当前数据到该亲缘类型,这样sqlite才会考虑其它更适合该值的类型存储该值。sqlite目前的版本支持以下五种亲缘类型:
亲缘类型 | 描述 |
TEXT | 数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。 |
NUMERIC | 当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么sqlite就会将该文本数据转换为IntegeR或REAL类型的数据,如果转换失败,sqlite仍会以TEXT方式存储该数据。对于NulL或BLOB类型的新数据,sqlite将不做任何转换,直接以NulL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为IntegeR同时又不会丢失数值信息,那么sqlite就会将其转换为IntegeR的存储方式。 |
IntegeR | 对于亲缘类型为IntegeR的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。 |
REAL | 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为IntegeR存储方式。 |
NONE | 不做任何的转换,直接以该数据所属的数据类型进行存储。 |
1. 决定字段亲缘性的规则:
字段的亲缘性是根据该字段在声明时被定义的类型来决定的,具体的规则可以参照以下列表。需要注意的是以下列表的顺序,即如果某一字段类型同时符合两种亲缘性,那么排在前面的规则将先产生作用。
1). 如果类型字符串中包含"INT",那么该字段的亲缘类型是IntegeR。
2). 如果类型字符串中包含"CHAR"、"CLOB"或"TEXT",那么该字段的亲缘类型是TEXT,如VARCHAR。
3). 如果类型字符串中包含"BLOB",那么该字段的亲缘类型是NONE。
4). 如果类型字符串中包含"REAL"、"FLOA"或"DOUB",那么该字段的亲缘类型是REAL。
5). 其余情况下,字段的亲缘类型为NUMERIC。
2. 具体示例:
声明类型
注:在Sqlite中,类型VARCHAR(255)的长度信息255没有任何实际意义,仅仅是为了保证与其它数据库的声明一致性。
三、比较表达式:
在sqlite3中支持的比较表达式有:"=","==","<","<=",">",">=","!=","<>","IN","NOT IN","betweeN","IS" and "IS NOT"。
数据的比较结果主要依赖于操作数的存储方式,其规则为:
1). 存储方式为NulL的数值小于其它存储类型的值。
2). 存储方式为IntegeR和REAL的数值小于TEXT或BLOB类型的值,如果同为IntegeR或REAL,则基于数值规则进行比较。
3). 存储方式为TEXT的数值小于BLOB类型的值,如果同为TEXT,则基于文本规则(ASCII值)进行比较。
4). 如果是两个BLOB类型的数值进行比较,其结果为C运行时函数memcmp()的结果。
四、操作符:
所有的数学操作符(+,-,*,/,%,<<,>>,&,and |)在执行之前都会先将操作数转换为NUMERIC存储类型,即使在转换过程中可能会造成数据信息的丢失。此外,如果其中一个操作数为NulL,那么它们的结果亦为NulL。在数学操作符中,如果其中一个操作数看上去并不像数值类型,那么它们结果为0或0.0。
以上是大佬教程为你收集整理的SQLite数据类型详解全部内容,希望文章能够帮你解决SQLite数据类型详解所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。