沃梦达 / IT编程 / 数据库 / 正文

详解SQLite中的数据类型

SQLite中的数据类型是决定存储在数据库中数据格式的基础。SQLite提供了五种原始数据类型和三种大对象(LOB)类型,包括:

详解SQLite中的数据类型

SQLite中的数据类型是决定存储在数据库中数据格式的基础。SQLite提供了五种原始数据类型和三种大对象(LOB)类型,包括:

  • NULL:表示一个无效值或空值。
  • INTEGER:表示带符号的整数值,可以是1,2,3,4,6,或8字节长度。
  • REAL:浮点数值,存储为8字节的IEEE浮点数字,仅适用于一些需要精确浮点数运算的场景。
  • TEXT:文本字符串,如果存储的文本包含介于单引号之间的引号,可以使用两个单引号进行转义。
  • BLOB:二进制数据,可用于存储图像和其他二进制数据。
  • Numeric BLOB:存储数字值的BLOB。
  • No Type BLOB:不带类型的BLOB。

INTEGER

INTEGER数据类型存储带符号的整数值,其存储范围为-9223372036854775808到9223372036854775807,即(-2^63) 到 (2^63-1)。INTEGER数据类型可以采用以下几种方式进行声明:

CREATE TABLE example (
    integer_column INTEGER,
    int_column INT,
    smallint_column SMALLINT,
    tinyint_column TINYINT,
    mediumint_column MEDIUMINT,
    bigint_column BIGINT
);

TEXT

TEXT数据类型用于存储文本,可以存储长度最长为2^31 - 1的字符串。当存储某个文本字符串时,如果字符串包含单引号,则需要进行特殊处理。在SQLite中,特殊处理的方法是把两个单引号字符''替换成一个单引号字符'。下面给出一个字符串中包含单引号字符的例子:

CREATE TABLE students (
    name TEXT,
    address TEXT
);

INSERT INTO students (name, address) VALUES ("Tom O'Neil", "123 Main St");

REAL

REAL数据类型用于存储浮点数值,存储为8字节的IEEE浮点数字。这意味着,在SQLite中,FLOAT和DOUBLE PRECISION数据类型被映射为REAL数据类型:

CREATE TABLE sales (
    sale_id INTEGER PRIMARY KEY,
    sale_date TEXT,
    sale_amount REAL
);

BLOB

BLOB数据类型用于存储二进制数据,常用于存储图像和其他二进制文件。BLOB数据类型可以在SQLite中使用如下方式声明:

CREATE TABLE example (
    blob_column BLOB,
    binary_column BINARY,
    other_blob_column OTHER_BLOB
);

示例说明

下面展示两个关于对SQLite数据类型的操作示例:

示例1:插入含有单引号的文本数据

在插入数据时,如果数据中包含特殊字符,例如引号、逗号等,需要进行转义。因为数据中会包含单引号,所以需要对单引号进行转义,方法是把两个单引号字符''替换成一个单引号字符'。下面是一个示例:

INSERT INTO example (text_column) VALUES ("Tom O'Neil''s house");

示例2:存储二进制文件

在存储二进制文件时,需要使用BLOB数据类型。下面是一个例子,将一个图片文件存储到数据库中:

CREATE TABLE images (
    image_id INTEGER PRIMARY KEY,
    image_name TEXT,
    image_data BLOB
);

INSERT INTO images (image_name, image_data) 
    VALUES ("flower.jpg", X'FFD8FFE000104A46494600010101004800480000FFDB0043000403030404030304040405040605050404040505070607070C0A080A0C0F0C0C0F0E0E0F0F0F1114110F0E0F0F0F111512161C1714181B121D1B1112151F1F1C1E1F1E1D1E1F1F1F211F1E1E202122FFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D01020300041105122131410613516107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A434445464748494A535455565758595A636465666768696A737475767778797A838485868788898A9293949596979899A2A3A4A5A6A7A8A9AAC2C3C4C5C6C7C8C9CADBDCDDDEDFE1E2E3E4E5E6E7E8E9EAEFFFD9);

其中,X'FFD8FFE000104A46494600010101004800480000FFDB0043000403030404030304040405040605050404040505070607070C0A080A0C0F0C0C0F0E0E0F0F0F1114110F0E0F0F0F111512161C1714181B121D1B1112151F1F1C1E1F1E1D1E1F1F1F211F1E1E202122FFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D01020300041105122131410613516107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A434445464748494A535455565758595A636465666768696A737475767778797A838485868788898A9293949596979899A2A3A4A5A6A7A8A9AAC2C3C4C5C6C7C8C9CADBDCDDDEDFE1E2E3E4E5E6E7E8E9EAEFFFD9`中的十六进制字符串为花朵图片的二进制数据。

本文标题为:详解SQLite中的数据类型