SQLite 数据库字段类型-详细说明,数据类型详细说明。

在这里插入图片描述

SQLite 数据类型

SQLite字段类型详细说明,包含存储类、亲和类型、布尔类型、日期时间类型的存储方式、取值范围及核心特性

创建 SQLite3 表时可使用的各种数据类型名称,同时也介绍了相应的亲和类型。

一、核心存储类(Storage Classes)

所有数据均以以下5种存储类之一存储,是SQLite数据的底层存储形式:

存储类详细描述存储方式取值范围
NULL表示字段无值,无实际数据内容。NULL标记存储(固定占用1字节标识)。仅包含NULL一个值。
INTEGER带符号整数,根据值的大小动态选择存储字节(1、2、3、4、6或8字节)。以二进制补码形式存储,小端序编码(按值大小自动适配字节长度)。按存储字节数划分:
- 1字节:-128 到 127
- 2字节:-32768 到 32767
- 3字节:-8388608 到 8388607
- 4字节:-2147483648 到 2147483647
- 6字节:-281474976710656 到 281474976710655
- 8字节:-9223372036854775808 到 9223372036854775807
REAL浮点数值,固定为8字节存储。以8字节IEEE 754双精度浮点格式存储(含符号位、指数位、尾数位)。取值范围:±1.7×10⁻³⁰⁸ 到 ±1.7×10³⁰⁸(精度约15-17位小数)。
TEXT数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。

文本字符串,依赖数据库编码存储。
以数据库指定编码(UTF-8、UTF-16BE或UTF-16LE)存储,带长度前缀标识字符串字节数。无严格长度限制(受数据库文件大小限制),支持所有Unicode字符。
BLOB二进制大对象,不进行任何编码转换。原样存储输入的二进制数据,带长度前缀标识数据字节数。无严格长度限制(受数据库文件大小限制),支持任意二进制数据(如图片、文件片段)。

二、亲和类型(Affinity)

SQLite支持列的亲和类型概念。任何列仍然可以存储任何类型的数据,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式。SQLite目前的版本支持以下五种亲缘类型

字段类型名称定义“亲和性”(优先存储的类型),而非强制类型。以下是文档明确的类型名称与亲和类型对应关系及特性:

亲和类型对应的数据类型名称(创建表时可使用)核心特性(数据插入时的转换规则)
TEXTCHARACTER(20)、VARCHAR(255)、VARYING CHARACTER(255)、NCHAR(55)、NATIVE CHARACTER(70)、NVARCHAR(100)、TEXT、CLOB优先将数据转换为TEXT存储:数值型数据(INTEGER/REAL)会先转为文本格式,BLOB会转为十六进制文本。
NUMERICNUMERIC、DECIMAL(10,5)、BOOLEAN、DATE、DATETIME优先转换为数值类型(INTEGER/REAL):
- 文本可无损转为数值时,自动转为INTEGER或REAL(如"123"→123,"3.14"→3.14);
- 转换失败或为NULL/BLOB时,保留原类型存储;
- 浮点文本"30000.0"可转为INTEGER(因无信息丢失)。
INTEGERINT、INTEGER、TINYINT、SMALLINT、MEDIUMINT、BIGINT、UNSIGNED BIG INT、INT2、INT8规则同NUMERIC,仅在CAST表达式处理时更倾向整数(如CAST(“3.0” AS INTEGER)结果为3)。
REALREAL、DOUBLE、DOUBLE PRECISION、FLOAT优先转换为REAL:文本可转为浮点数时自动转换(如"3"→3.0),但"30000.0"不会转为INTEGER(区别于NUMERIC)。
NONEBLOB、未指定类型(如CREATE TABLE t (col);不进行任何转换,直接以原始存储类存储(如BLOB保持二进制,TEXT保持字符串)。

三、Boolean类型

SQLite无专门的Boolean存储类,通过INTEGER存储:

类型存储方式取值范围说明
BOOLEAN以INTEGER存储0(false)、1(true)亲和类型为NUMERIC,插入时会按NUMERIC规则转换(如"true"会尝试转为1)。

四、Date与Time类型

无专门存储类,可通过TEXT、REAL、INTEGER存储,文档明确格式如下:

存储类存储方式日期时间格式取值范围(基于存储类)
TEXT以TEXT存储,采用数据库编码格式为"YYYY-MM-DD HH:MM:SS.SSS"(如"2023-10-01 15:30:45.123")无严格范围,受TEXT长度限制(需符合ISO 8601格式)。
REAL以8字节REAL存储表示从公元前4714年11月24日格林尼治时间正午开始的天数(Julian天数)同REAL的取值范围(±1.7×10⁻³⁰⁸ 到 ±1.7×10³⁰⁸),可覆盖极广时间范围。
INTEGER以INTEGER存储表示从1970-01-01 00:00:00 UTC开始的秒数(Unix时间戳)同INTEGER的8字节范围:0 到 9223372036854775807(对应约公元292亿年)。

关键说明

  1. 存储类是数据的实际存储形式,亲和类型仅影响插入时的优先转换规则,不限制实际存储的类型(如INTEGER亲和性字段可存储TEXT)。
  2. 若需严格限制取值范围(如年龄0-120),需通过CHECK约束实现(如age INTEGER CHECK (age BETWEEN 0 AND 120))。
  3. 日期时间可通过内置函数转换(如datetime(ts, 'unixepoch')将Unix时间戳转为TEXT格式)。

TEXT类型:文本字符串

  • 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
  • 数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。
字段名称详细说明存储方式取值范围示例值
CHARACTER(20) 小写character(20)亲和类型为TEXT,数据插入时优先转换为文本格式存储;数值型数据会转为文本,BLOB会转为十六进制文本;括号中的20表示建议的字符长度使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储,带长度前缀标识字符串字节数文本字符串,建议长度为20个字符,无严格上限(受数据库文件大小限制),支持所有Unicode字符“SQLite text 20 chars”(约20个字符)
VARCHAR(255) 小写varchar(255)亲和类型为TEXT,数据插入时优先转换为文本格式存储;数值型数据会转为文本,BLOB会转为十六进制文本;括号中的255表示建议的字符长度使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储,带长度前缀标识字符串字节数文本字符串,建议长度为255个字符,无严格上限,支持所有Unicode字符“这是一个长度约50的文本字符串,用于示例varchar(255)字段”
VARYING CHARACTER(255) 小写varying character(255)亲和类型为TEXT,数据插入时优先转换为文本格式存储;数值型数据会转为文本,BLOB会转为十六进制文本;括号中的255表示建议的字符长度使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储,带长度前缀标识字符串字节数文本字符串,建议长度为255个字符,无严格上限,支持所有Unicode字符“Varying character示例,长度控制在255以内”
NCHAR(55) 小写nchar(55)亲和类型为TEXT,数据插入时优先转换为文本格式存储;数值型数据会转为文本,BLOB会转为十六进制文本;括号中的55表示建议的字符长度使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储,带长度前缀标识字符串字节数文本字符串,建议长度为55个字符,无严格上限,支持所有Unicode字符“NCHAR字段示例,字符长度接近55个,用于测试存储效果”
NATIVE CHARACTER(70) 小写native character(70)亲和类型为TEXT,数据插入时优先转换为文本格式存储;数值型数据会转为文本,BLOB会转为十六进制文本;括号中的70表示建议的字符长度使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储,带长度前缀标识字符串字节数文本字符串,建议长度为70个字符,无严格上限,支持所有Unicode字符“Native Character字段的示例文本,长度大约70个字符,展示存储特性”
NVARCHAR(100) 小写nvarchar(100)亲和类型为TEXT,数据插入时优先转换为文本格式存储;数值型数据会转为文本,BLOB会转为十六进制文本;括号中的100表示建议的字符长度使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储,带长度前缀标识字符串字节数文本字符串,建议长度为100个字符,无严格上限,支持所有Unicode字符“NVARCHAR(100)示例:这是一个较长的文本,用于测试该字段的存储能力,长度控制在100字符左右”
TEXT 小写text亲和类型为TEXT,数据插入时优先转换为文本格式存储;数值型数据会转为文本,BLOB会转为十六进制文本;无建议长度限制使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储,带长度前缀标识字符串字节数文本字符串,无严格长度限制(受数据库文件大小限制),支持所有Unicode字符“这是一个普通TEXT字段的示例文本,可长可短,不受固定长度限制”
CLOB 小写clob亲和类型为TEXT,数据插入时优先转换为文本格式存储;数值型数据会转为文本,BLOB会转为十六进制文本;通常用于存储大文本数据使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储,带长度前缀标识字符串字节数文本字符串,适合存储大文本(如文档内容),无严格上限(受数据库文件大小限制),支持所有Unicode字符“CLOB字段用于存储大文本,例如这是一段较长的文章内容,可能包含多个段落、标点符号和特殊字符…”

NUMERIC类型: 数字

当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。

字段名称详细说明存储方式取值范围示例值
NUMERIC 小写numeric亲和类型为NUMERIC,数据插入时优先转换为数值类型(INTEGER或REAL);文本可无损转为数值时自动转换(如"123"→123),转换失败或为NULL/BLOB时保留原类型;浮点文本"30000.0"可转为INTEGER(无信息丢失)转换为INTEGER时按1、2、3、4、6或8字节动态存储;转换为REAL时按8字节IEEE浮点存储;TEXT/BLOB按对应存储类存储若为INTEGER:-128到127(1字节)、-32768到32767(2字节)等;若为REAL:±1.7×10⁻³⁰⁸到±1.7×10³⁰⁸;TEXT/BLOB同对应存储类范围123(INTEGER)、3.14(REAL)、“无法转换的文本”(TEXT)
DECIMAL(10,5) 小写decimal(10,5)亲和类型为NUMERIC,规则同NUMERIC;括号中(10,5)表示总位数10位、小数位5位(语义上的数值格式)转换为INTEGER/REAL时按对应存储类存储;TEXT/BLOB按对应存储类存储数值需符合"总位数10位、小数位5位"语义(如123.45678);其他类型同对应存储类范围123.45678(符合10位总长度、5位小数)、12345.67890
BOOLEAN 小写boolean亲和类型为NUMERIC,无专门存储类,通过INTEGER存储;0表示false,1表示true;插入时按NUMERIC规则转换(如"true"→1)以INTEGER存储,按值大小动态使用1-8字节(二进制补码)仅0(false)、1(true)0(false)、1(true)
DATE 小写date亲和类型为NUMERIC,无专门存储类,可存储为TEXT(日期字符串)、REAL(Julian天数)或INTEGER(Unix时间戳);插入时按NUMERIC规则转换为TEXT时按数据库编码存储;为REAL时按8字节IEEE浮点存储;为INTEGER时按动态字节存储若为TEXT:符合"YYYY-MM-DD"格式字符串;若为REAL:±1.7×10⁻³⁰⁸到±1.7×10³⁰⁸;若为INTEGER:-9223372036854775808到9223372036854775807“2023-10-01”(TEXT)、2459876.5(REAL,Julian天数)、1696107000(INTEGER,Unix时间戳)
DATETIME 小写datetime亲和类型为NUMERIC,无专门存储类,可存储为TEXT(日期时间字符串)、REAL(Julian天数)或INTEGER(Unix时间戳);插入时按NUMERIC规则转换为TEXT时按数据库编码存储;为REAL时按8字节IEEE浮点存储;为INTEGER时按动态字节存储若为TEXT:符合"YYYY-MM-DD HH:MM:SS.SSS"格式字符串;若为REAL:±1.7×10⁻³⁰⁸到±1.7×10³⁰⁸;若为INTEGER:-9223372036854775808到9223372036854775807“2023-10-01 15:30:45.123”(TEXT)、2459876.6463(REAL,Julian天数)、1696107045(INTEGER,Unix时间戳)

INTEGER类型:带符号的整数

  • 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
  • 对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。
字段名称详细说明存储方式取值范围示例值
INT 小写int亲和类型为INTEGER,规则同NUMERIC,仅CAST表达式处理时更倾向整数(如CAST(“3.0” AS INTEGER)→3);类型名称不限制存储长度,仅影响亲和性以INTEGER存储,按值大小动态使用1、2、3、4、6或8字节(二进制补码,小端序)1字节:-128到127;2字节:-32768到32767;3字节:-8388608到8388607;4字节:-2147483648到2147483647;6字节:-281474976710656到281474976710655;8字节:-9223372036854775808到92233720368547758072147483647(4字节最大值)、-128(1字节最小值)
INTEGER 小写integer亲和类型为INTEGER,规则同NUMERIC,仅CAST表达式处理时更倾向整数;类型名称不限制存储长度,仅影响亲和性以INTEGER存储,按值大小动态使用1、2、3、4、6或8字节(二进制补码,小端序)1字节:-128到127;2字节:-32768到32767;3字节:-8388608到8388607;4字节:-2147483648到2147483647;6字节:-281474976710656到281474976710655;8字节:-9223372036854775808到92233720368547758079223372036854775807(8字节最大值)、32767(2字节最大值)
TINYINT 小写tinyint亲和类型为INTEGER,规则同NUMERIC,仅CAST表达式处理时更倾向整数;类型名称不限制存储长度(非固定1字节),仅影响亲和性以INTEGER存储,按值大小动态使用1、2、3、4、6或8字节(二进制补码,小端序)1字节:-128到127;2字节:-32768到32767;3字节:-8388608到8388607;4字节:-2147483648到2147483647;6字节:-281474976710656到281474976710655;8字节:-9223372036854775808到9223372036854775807127(1字节最大值)、-128(1字节最小值)
SMALLINT 小写smallint亲和类型为INTEGER,规则同NUMERIC,仅CAST表达式处理时更倾向整数;类型名称不限制存储长度(非固定2字节),仅影响亲和性以INTEGER存储,按值大小动态使用1、2、3、4、6或8字节(二进制补码,小端序)1字节:-128到127;2字节:-32768到32767;3字节:-8388608到8388607;4字节:-2147483648到2147483647;6字节:-281474976710656到281474976710655;8字节:-9223372036854775808到922337203685477580732767(2字节最大值)、-32768(2字节最小值)
MEDIUMINT 小写mediumint亲和类型为INTEGER,规则同NUMERIC,仅CAST表达式处理时更倾向整数;类型名称不限制存储长度,仅影响亲和性以INTEGER存储,按值大小动态使用1、2、3、4、6或8字节(二进制补码,小端序)1字节:-128到127;2字节:-32768到32767;3字节:-8388608到8388607;4字节:-2147483648到2147483647;6字节:-281474976710656到281474976710655;8字节:-9223372036854775808到92233720368547758078388607(3字节最大值)、-8388608(3字节最小值)
BIGINT 小写bigint亲和类型为INTEGER,规则同NUMERIC,仅CAST表达式处理时更倾向整数;类型名称不限制存储长度(非固定8字节),仅影响亲和性以INTEGER存储,按值大小动态使用1、2、3、4、6或8字节(二进制补码,小端序)1字节:-128到127;2字节:-32768到32767;3字节:-8388608到8388607;4字节:-2147483648到2147483647;6字节:-281474976710656到281474976710655;8字节:-9223372036854775808到92233720368547758079223372036854775807(8字节最大值)、-9223372036854775808(8字节最小值)
UNSIGNED BIG INT 小写unsigned big int亲和类型为INTEGER,规则同NUMERIC,仅CAST表达式处理时更倾向整数;名称中"UNSIGNED"不限制无符号,实际可存储带符号整数,仅影响亲和性以INTEGER存储,按值大小动态使用1、2、3、4、6或8字节(二进制补码,小端序)1字节:-128到127;2字节:-32768到32767;3字节:-8388608到8388607;4字节:-2147483648到2147483647;6字节:-281474976710656到281474976710655;8字节:-9223372036854775808到92233720368547758074294967295(4字节无符号最大值,实际以带符号存储)、0
INT2 小写int2亲和类型为INTEGER,规则同NUMERIC,仅CAST表达式处理时更倾向整数;类型名称不限制存储长度,仅影响亲和性以INTEGER存储,按值大小动态使用1、2、3、4、6或8字节(二进制补码,小端序)1字节:-128到127;2字节:-32768到32767;3字节:-8388608到8388607;4字节:-2147483648到2147483647;6字节:-281474976710656到281474976710655;8字节:-9223372036854775808到922337203685477580732767(2字节最大值)、-32768(2字节最小值)
INT8 小写int8亲和类型为INTEGER,规则同NUMERIC,仅CAST表达式处理时更倾向整数;类型名称不限制存储长度,仅影响亲和性以INTEGER存储,按值大小动态使用1、2、3、4、6或8字节(二进制补码,小端序)1字节:-128到127;2字节:-32768到32767;3字节:-8388608到8388607;4字节:-2147483648到2147483647;6字节:-281474976710656到281474976710655;8字节:-9223372036854775808到92233720368547758079223372036854775807(8字节最大值)、-9223372036854775808(8字节最小值)

REAL类型:浮点值

  • 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
  • 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。
字段名称详细说明存储方式取值范围示例值
REAL 小写real亲和类型为REAL,数据插入时优先转换为REAL类型;文本可转为浮点数时自动转换(如"3"→3.0),但"30000.0"不会转为INTEGER(区别于NUMERIC)以8字节IEEE 754双精度浮点格式存储(二进制,含符号位、指数位、尾数位)±1.7×10⁻³⁰⁸ 到 ±1.7×10³⁰⁸(精度约15-17位小数)3.14159、-0.00001(1e-5)、1.23e20
DOUBLE 小写double亲和类型为REAL,数据插入时优先转换为REAL类型;文本可转为浮点数时自动转换,"30000.0"不会转为INTEGER以8字节IEEE 754双精度浮点格式存储±1.7×10⁻³⁰⁸ 到 ±1.7×10³⁰⁸2.71828(自然常数e)、-1.618e0(黄金比例)
DOUBLE PRECISION 小写double precision亲和类型为REAL,数据插入时优先转换为REAL类型;文本可转为浮点数时自动转换,"30000.0"不会转为INTEGER以8字节IEEE 754双精度浮点格式存储±1.7×10⁻³⁰⁸ 到 ±1.7×10³⁰⁸6.022e23(阿伏伽德罗常数)、-3.14e-10
FLOAT 小写float亲和类型为REAL,数据插入时优先转换为REAL类型;文本可转为浮点数时自动转换,"30000.0"不会转为INTEGER以8字节IEEE 754双精度浮点格式存储±1.7×10⁻³⁰⁸ 到 ±1.7×10³⁰⁸9.8(重力加速度)、1.0e308(接近最大值)

NONE类型

  • 不做任何的转换,直接以该数据所属的数据类型进行存储。

BLOB

  • 值是一个 blob 数据,完全根据它的输入存储。
字段名称详细说明存储方式取值范围示例值
BLOB 小写blob亲和类型为NONE,数据插入时不进行任何转换,直接以原始二进制数据存储;适合存储图片、文件片段等二进制内容BLOB 数据以二进制形式存储,无需显式长度前缀,但 SQLite 内部记录长度信息。

原样存储输入的二进制数据,带长度前缀标识数据字节数
无严格长度限制(受数据库文件大小限制),支持任意二进制数据X’0102FF’(十六进制表示的二进制数据)、X’48656C6C6F’(对应"Hello"的二进制)

NONE 亲和类型BLOB 字段名称未指定类型字段定义方式 的关联与区别


1. NONE(亲和类型)

定义

  • NONE 是 SQLite 的五种亲和类型之一,表示字段在插入数据时 不进行任何类型转换,直接保留原始数据的存储类(Storage Class)。
  • 核心特性
    • 插入的值以原始类型存储(如 TEXT 存为 TEXTBLOB 存为 BLOB)。
    • 唯一“不干预数据类型”的亲和类型,区别于 TEXT(强制转文本)、NUMERIC(优先转数值)等。

对应字段声明方式

  • 两种情况触发 NONE 亲和类型
    1. 字段明确声明为 BLOB(字段名称为 BLOB)。
    2. 字段未指定类型(如 CREATE TABLE t (col); 中的 col)。

适用场景

  • 严格保留原始数据格式
    例如存储二进制文件(图片、音频)、加密数据、原始字节流等,避免 SQLite 隐式转换导致数据丢失或损坏。

2. BLOB(字段名称)

定义

  • BLOB 是 SQLite 中专门用于存储二进制数据的字段名称,其亲和类型为 NONE
  • 存储方式
    • 原样存储输入的二进制数据,带长度前缀(标识二进制数据的字节数)。
    • 不进行编码转换(如 UTF-8 编码),直接保留原始字节流。

取值范围

  • 无严格长度限制:仅受数据库文件大小限制(默认最大 BLOB 大小为 1GB,可通过配置调整)。
  • 支持任意二进制数据:如字节流、文件片段、十六进制数据等。

示例值

  • X'0102FF':十六进制表示的二进制数据(对应字节 0x010x020xFF)。
  • X'48656C6C6F':字符串 "Hello" 的原始二进制数据。
  • 图片的二进制字节流:如 PNG 格式的文件二进制数据。

3. 未指定类型(字段定义方式)

定义

  • 未指定类型 是字段定义方式的一种,指创建表时字段未声明任何类型(如 CREATE TABLE t (id, name); 中的 idname)。
  • 亲和类型:自动推断为 NONE,数据插入时 不进行类型转换,直接以原始存储类存储。

存储方式

  • 根据输入数据的存储类决定
    • 输入为 INTEGER:存为 INTEGER
    • 输入为 TEXT:存为 TEXT
    • 输入为 BLOB:存为 BLOB
    • 输入为 REAL:存为 REAL

取值范围

  • 取决于输入数据的存储类
    • INTEGER:范围同 SQLite 的 INTEGER 存储类(-128 到 9223372036854775807 等)。
    • TEXT:无严格长度限制,支持 Unicode。
    • BLOB:无严格长度限制,支持任意二进制数据。

示例值

  • 123:存储为 INTEGER
  • "未指定类型的文本":存储为 TEXT
  • X'ABCDEF':存储为 BLOB
  • 3.14:存储为 REAL

三者关系总结

特性NONE(亲和类型)BLOB(字段名称)未指定类型(字段定义方式)
核心规则数据插入时 不进行任何类型转换,保留原始存储类。亲和类型为 NONE,用于存储二进制数据。亲和类型为 NONE,字段未声明类型,存储方式由输入数据决定。
字段声明方式无直接字段名称,需通过字段定义方式(BLOB 或未指定类型)实现。字段名称为 BLOB(显式声明)。字段未声明类型(隐式定义)。
存储方式原始数据直接存储,无编码或格式转换。原样存储二进制数据,带长度前缀。根据输入数据的存储类决定(INTEGERTEXTBLOBREAL 等)。
典型应用场景存储混合类型数据、二进制文件等需严格保留原始格式的场景。存储图片、音频、加密数据等二进制内容。快速原型开发、临时表或日志表。
区别是一种 亲和类型规则,适用于所有声明为 BLOB 或未指定类型的字段。字段名称,显式声明为 BLOB,专用于二进制数据。字段定义方式,隐式未指定类型,存储方式由输入数据决定。

关键建议

  1. 显式声明字段类型

    • 对关键业务数据表,优先使用 BLOB 显式声明字段,避免依赖未指定类型导致的隐式推断问题。
    • 例如:CREATE TABLE files (content BLOB);
  2. BLOB 处理注意事项

    • 插入 BLOB 数据时,使用参数化查询或二进制流操作,避免手动处理导致数据损坏。
    • 检索 BLOB 数据时,直接读取二进制字节流,无需解码。
  3. 避免未指定类型的滥用

    • 未指定类型字段可能导致后续插入数据类型不一致(如先插入 TEXT,后插入 INTEGER),影响数据完整性。
    • 对需要严格类型约束的字段,显式声明类型(如 TEXTINTEGER)。

示例代码(SQLite)

-- 1. 使用 BLOB 字段存储二进制数据
CREATE TABLE images (id INTEGER PRIMARY KEY,image_data BLOB  -- 亲和类型为 NONE,存储二进制图片
);-- 2. 未指定类型的字段(自动推断为 NONE)
CREATE TABLE logs (id INTEGER,message  -- 亲和类型为 NONE,存储原始数据
);-- 3. 插入混合类型数据
INSERT INTO logs (id, message) VALUES 
(1, 'Error: File not found'),  -- 存储为 TEXT
(2, 12345),                    -- 存储为 INTEGER
(3, X'010203');                -- 存储为 BLOB

通过上述整合,可清晰理解 NONE 亲和类型BLOB 字段名称未指定类型字段定义方式 的关联与区别,确保在实际应用中正确选择数据类型,避免隐式转换带来的问题。


参考

  • SQLite 数据类型-菜鸟教程
  • Datatypes In SQLite Version 3
  • Datatypes In SQLite Version 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89762.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js特训专栏-实战进阶:17.会话管理与安全存储

🔥 欢迎来到 Node.js 实战专栏!在这里,每一行代码都是解锁高性能应用的钥匙,让我们一起开启 Node.js 的奇妙开发之旅! Node.js 特训专栏主页 专栏内容规划详情 会话管理与安全存储:从原理到实战的Web安全实践 在Web应用中,会话(Session)是维持用户状态的核心机制—…

【橘子分布式】gRPC(编程篇-中)

一、简介 我们之前已经完成了对于api模块的开发,也就是已经生成了基础的类和对应的接口,现在我们需要完成的是client和server端的开发。其实如同thrift一样,现在要做的就是实现我们之前定义的service里面的hello方法,里面写我们的…

Spring Boot 项目中数据同步之binlog和MQ

在 Spring Boot 项目中,“监听 binlog” 和 “业务代码中集成 MQ” 是实现数据同步、事件驱动的两种主流方法。 简单来说,这个选择可以概括为: 监听 Binlog (如使用 Canal):像一个数据库的贴身秘书,它忠实地记录数据库…

MySQL 写入性能优化全攻略(附 GitHub 面试题项目链接)

面试中你可能会遇到这样的问题: 💬 “假设你的接口一天收到百万级请求,MySQL 撑得住吗?你会怎么优化写入性能?” 刚开始我也懵过,后来不断复盘与总结,现在我可以用结构化方式给出一个相对完整的…

用Dynamic chunk去干掉tokenizer?

一般你们下AR模型的时候,都有这个,也就是tokenzier,tokenizer是干啥的,其实就是你的分词字典不光有specal的token对应的还有实际的对应的分词对应的代码,比如:也有tokenzier没显示的,比如&#…

Linux系统日志管理入门:journalctl命令完全指南

Linux系统日志管理入门:journalctl命令完全指南前言一、journalctl介绍二、基础使用:快速上手1. 查看全部日志2. 查看本次启动的日志3. 按时间筛选日志4. 按服务(单元)过滤日志三、常用参数与场景四、实战案例:解决实际…

神经网络的基本骨架——nn.Module的使用(torch.nn库)

在 PyTorch 中,nn.Module 是所有神经网络模块的基类,用于构建和组织深度学习模型。它提供了一系列工具和功能,使模型的定义、训练和部署更加高效和灵活。nn Neural Network(神经网络)核心作用:模块化设计&…

静态住宅IP和节点有什么区别?哪种更适合你的需求?

在跨境电商、社媒运营等业务中,“静态住宅IP”和“节点”常被混淆使用,但两者代表网络架构中不同层级的资源。选错可能导致账号风控、业务效率低下。IPdodo将在本篇文章中,从本质、业务场景到选择策略,为您一文道清两者之间的区别…

AI编程工具对比:Cursor、GitHub Copilot与Claude Code

文章目录AI编程工具对比:Cursor、GitHub Copilot与Claude Code一、产品定位与核心架构1.1 Cursor:AI原生IDE的代表1.2 GitHub Copilot:代码补全的行业标杆1.3 Claude Code:终端Agent的革新者二、核心功能深度对比2.1 代码生成与理…

车载传统ECU---MCU软件架构设计指南

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

SCSAI工业智能体的核心特征

一个覆盖工业全场景、由多个垂直领域智能体构成的开放生态平台。每个智能体都是具备独立能力的 “数字单元”,同时又能通过平台实现互联、协作与进化。一、工业智能体平台的核心定位本质:工业领域的 “智能体操作系统 应用市场”,为各类工业…

Java大视界:Java大数据在智能医疗电子健康档案数据挖掘与健康服务创新>

> 本文通过完整代码示例,揭秘如何用Java大数据技术挖掘电子健康档案价值,实现疾病预测、个性化健康管理等创新服务。 ### 一、智能医疗时代的数据金矿 电子健康档案(EHR)作为医疗数字化的核心载体,包含海量患者全生命周期健康数据。据统计,全球医疗数据量正以每年…

家庭KTV v1.1.9 | 曲库丰富,无限制免费K歌

家庭KTV是一款专门为家庭娱乐设计的K歌软件,旨在让用户在家中也能享受到与KTV相同的高质量K歌体验。该应用拥有丰富的歌曲库,包括经典老歌和当下流行热曲等多种类型,满足不同年龄段用户的需求。家庭KTV支持多种点歌方式,如按照歌手…

vscode 一直连不上远程,网络是通的,ssh 也能直接登录远程

vscode 一直连不上远程,网络是通的,ssh 也能直接登录远程,但vscode 死活连不上 解决办法: 取消勾选remote.SSH.useExecServer 打开 VS Code 设置(Ctrl, → 搜索 useExecServer) 取消对应的勾选即可

前端面试专栏-工程化:28.团队协作与版本控制(Git)

🔥 欢迎来到前端面试通关指南专栏!从js精讲到框架到实战,渐进系统化学习,坚持解锁新技能,祝你轻松拿下心仪offer。 前端面试通关指南专栏主页 前端面试专栏规划详情 项目实战与工程化模块-团队协作与版本控制&#xff…

无标记点动捕:如何突破传统娱乐边界,打造沉浸式交互体验

你能想象在游戏交互中,你的动作和表情可以不用佩戴任何设备就实时映射在虚拟角色上吗?在传统娱乐中,用户体验常被设备束缚——手柄、传感器、标记点让用户无法彻底投入。而无标记点动捕技术作为一种将用户肢体转化为虚拟世界的“自然控制器”…

C#监听txt文档获取新数据

目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl C中断4. 防止程序退出(无限循环)总结前言 之前有个需求就是监听文件夹中最新的txt文档获取最新数据,还有其他功能,比如&am…

程序员管理与AIStarter开发:如何避免需求Bug,提升项目效率

大家好,我是熊哥!今天聊聊程序员管理和AIStarter开发中的经验教训。创业公司项目常因需求不清出Bug,比如“管理员删管理员”这种低级错误,引发用户不满。熊哥亲测:程序员管理关键在于明确需求!通过整理需求…

网络爬虫概念初解

大家好! 网络爬虫(Web Crawler)是一种自动化程序,能够模拟人类浏览行为,按照预设规则从互联网上抓取、解析和存储数据。它像一只“数字蜘蛛”,沿着网页链接爬行,高效采集目标信息。以下是核心要点&#xff…

Pytorch 使用报错 RuntimeError: Caught RuntimeError in DataLoader worker process 0.

这个错误是可能是由于在DataLoader的工作进程中尝试访问CUDA设备导致的。PyTorch的DataLoader使用多进程加载数据,而CUDA上下文不能在子进程中直接使用。修改前的代码为:def prepare_data(file_path):# 读取Excel文件df pd.read_excel(file_path, heade…