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?3?? 到 ±1.7×103??(精度約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?3?? 到 ±1.7×103??),可覆蓋極廣時間范圍。
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?3??到±1.7×103??;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?3??到±1.7×103??;若為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?3??到±1.7×103??;若為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?3?? 到 ±1.7×103??(精度約15-17位小數)3.14159、-0.00001(1e-5)、1.23e20
DOUBLE 小寫double親和類型為REAL,數據插入時優先轉換為REAL類型;文本可轉為浮點數時自動轉換,"30000.0"不會轉為INTEGER以8字節IEEE 754雙精度浮點格式存儲±1.7×10?3?? 到 ±1.7×103??2.71828(自然常數e)、-1.618e0(黃金比例)
DOUBLE PRECISION 小寫double precision親和類型為REAL,數據插入時優先轉換為REAL類型;文本可轉為浮點數時自動轉換,"30000.0"不會轉為INTEGER以8字節IEEE 754雙精度浮點格式存儲±1.7×10?3?? 到 ±1.7×103??6.022e23(阿伏伽德羅常數)、-3.14e-10
FLOAT 小寫float親和類型為REAL,數據插入時優先轉換為REAL類型;文本可轉為浮點數時自動轉換,"30000.0"不會轉為INTEGER以8字節IEEE 754雙精度浮點格式存儲±1.7×10?3?? 到 ±1.7×103??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
英文地址,請注明出處:http://en.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…