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提供的此种特征。
oracle中的boolean数据类型仅限于PL/SQL,oracle本身没有默认的提供布尔型的存储方式在设计数据库表结构时,选择一种高效的策略来存储一个可以在很多编程环境中使用的逻辑布尔值是非常重要的。(虽然 Oracle 没有 Boolean 数据类型来表示数据库字段,但是在 PL/SQL 中却具有 Boolean 数据类型。)
任何布尔定义的字段还应该被正确进行约束检查,以确保在插入/更新时输入了有效的值。
create table tbool (bool char check (bool in ('N','Y'))
insert into tbool values ('N')
insert into tbool values ('Y')
最常见的设计是模拟很多 Oracle 的数据字典视图中使用的类似布尔的标志,选择‘Y’表示真,‘N’表示假。然而,要正确地与宿主环境交互,比如与 JDBC、OCCI 和其它编程环境交互,最好选择0表示假,选择1表示真,从而使getBoolean 和setBoolean 能够正确地处理它们。
We could define a Boolean as NUMBER(1)however, in Oracle's internal number format, 0 takes 1 byte and 1 takes 2 bytes after the length byte (so it's more efficient to store it as CHAR). Even though the character is defined as CHAR, SQL can convert and verify against actual numbers.
我们可以将一个布乐类型定义为 NUMBER(1);然而,在 Oracle 的内部数字格式中,0在长度字节之后占用一个字节,而1在长度字节之后占用两个字节(所以更加高效地方式是将其存储为 CHAR)。即使字符被定义为 CHAR,SQL 也可以转换和验证实际的数字。
create table tbool (bool char check (bool in (0,1))
insert into tbool values(0)
insert into tbool values(1)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)