標籤:
SQLite 資料類型總結
1。嚴格地說,SQLite 沒有資料類型。SQLite 使用動態資料類型,即:資料的類型取決於資料本身,而不是它的容器(欄位)
2。儲存類型(Storage Class):資料儲存到檔案後的表現形式。包括:
- NULL - 空值
- INTERGER - 有符號整數類型
- REAL - 浮點數類型
- TEXT - 字串(其編碼取決於DB的編碼)
- BLOB - 二進位表示
3。親和類型(Type Affinity):資料表的列中的資料對Storage Class的傾向性
- TEXT
- NUMERIC
- INTEGER
- REAL
- NONE
4。宣告類型(Declared Type):CREATE TABLE/ALTER TABLE 語句中聲明的列的類型
Declared Type、Type Affinity、Storage Class 之間的關係:
Declared Type |
Type Affinity |
Storage Class(按優先順序) |
INT |
INTERGER |
(同NUMERIC) |
CHAR TEXT |
TEXT |
TEXT/NULL/BLOB |
BLOB (不指定) |
NONE |
(As is) |
REAL FLOAT DOUBLE |
REAL |
(同NUMERIC) |
(其它) |
NUMERIC |
INTEGER/REAL/TEXT/NULL/BLOB |
例外:
(1)BLOB 資料始終儲存為 BLOB 的 Storage Class
5。資料的比較。比較操作符(=,>,>=...)、IN、Sort by等,按照以下5個步驟比較左右運算元:
- Step 1:根據下列規則確定左右運算元的 Type Affinity:
- 列名運算式 - 該列的 Affinity(見前面第4節表格第2列)
- CAST ... AS ... - 所指定的 Affinity(見前面第4節表格第2列)
- 其他情況 - NONE Affinity
- Step 2:Type Affinity 轉換。如果左、右運算元都是下列 3 種 Type Affinity 之一,則按照下列優先順序,將低優先順序的轉換為高優先順序的:
- 數值類(INTEGER/REAL/NUMERIC)
- TEXT
- NONE
- Step 3:由 Type Affinity 及資料的實際類型,確定其 Storage Class(見前面第4節表格第3列)
- Step 4:如果左、右運算元屬於不同的 Storage Class,則按照以下順序(由小到大)確定比較結果:
- NULL
- 數值類(INTEGER/REAL)
- TEXT
- BLOB
- Step 5:如果左、右運算元屬於相同的 Storage Class,則根據以下規則進行比較
- NULL - 左值始終小於右值
- 數值類(INTEGER/REAL)- 按數值比較
- TEXT - 逐字元比較
- BLOB - 用 memcmp() 函數比較
SQLite 資料類型總結