Sqlite3各数据类型表⽰
⼀、存储种类和数据类型:
SQLite将数据值的存储划分为以下⼏种存储类型:
NULL: 表⽰该值为NULL值。
INTEGER: ⽆符号整型值。
小学生心理健康内容REAL: 浮点值。
TEXT: ⽂本字符串,存储使⽤的编码⽅式为UTF-8、UTF-16BE、UTF-16LE。
BLOB: 存储Blob数据,该类型数据和输⼊数据完全相同。
由于SQLite采⽤的是动态数据类型,⽽其他传统的关系型数据库使⽤的是静态数据类型,即字段可以存储的数据类型是在表声明时即以确定的,因此它们之间在数据存储⽅⾯还是存在着很⼤的差异。在SQLite中,存储分类和数据类型也有⼀定的差别,如INTEGER存储类别可以包含6种不同长度的Integer数据类型,然⽽这些INTEGER数据⼀旦被读⼊到内存后,SQLite会将其全部视为占⽤8个字节⽆符号整
型。因此对于SQLite⽽⾔,即使在表声明中明确了字段类型,我们仍然可以在该字段中存储其它类型的数据。然⽽需要特别说明的是,尽管SQLite为我们提供了这种⽅便,但是⼀旦考虑到数据库平台的可移植性问题,我们在实际的开发中还是应该尽可能的保证数据类型的存储和声明的⼀致性。除⾮你有极为充分的理由,同时⼜不再考虑数据库平台的移植问题,在此种情况下确实可以使⽤SQLite提供的此种特征。
1. 布尔数据类型:
SQLite并没有提供专门的布尔存储类型,取⽽代之的是存储整型1表⽰true,0表⽰fal。
2. ⽇期和时间数据类型:
和布尔类型⼀样,SQLite也同样没有提供专门的⽇期时间存储类型,⽽是以TEXT、REAL和INTEGER类型分别不同的格式表⽰该类型,如:
TEXT: "YYYY-MM-DD HH:MM:SS.SSS"
REAL: 以Julian⽇期格式存储
勤劳的勤
现在我们学校INTEGER: 以Unix时间形式保存数据值,即从1970-01-01 00:00:00到当前时间所流经的秒数。
⼆、类型亲缘性:
为了最⼤化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. 具体⽰例:
声明类型亲缘类型应⽤规则
INT
INTEGER
TINYINT
SMALLINT
INTEGER1
MEDIUMINT
BIGINT71年属什么
UNSIGNED BIG INT
INT2
INT8
CHARACTER(20)
背单词的技巧
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
TEXT2
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
BLOB NONE3
REAL
DOUBLE
REAL4
DOUBLE PRECISION
FLOAT
NUMERIC
DECIMAL(10,5)
BOOLEAN
NUMERIC5
DATE
DATETIME
注:在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。