SQLite 數據類型總結


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:
  1. 列名表達式 - 該列的 Affinity(見前面第4節表格第2列)
  2. CAST ... AS ... - 所指定的 Affinity(見前面第4節表格第2列)
  3. 其他情況 - NONE Affinity
  • Step 2:Type Affinity 轉換。如果左、右操作數都是下列 3 種 Type Affinity 之一,則按照下列優先順序,將低優先級的轉換為高優先級的:
  1. 數值類(INTEGER/REAL/NUMERIC)
  2. TEXT
  3. NONE
  • Step 3:由 Type Affinity 及數據的實際類型,確定其 Storage Class(見前面第4節表格第3列)

 

  • Step 4:如果左、右操作數屬於不同的 Storage Class,則按照以下順序(由小到大)確定比較結果:
  1. NULL
  2. 數值類(INTEGER/REAL)
  3. TEXT
  4. BLOB
  • Step 5:如果左、右操作數屬於相同的 Storage Class,則根據以下規則進行比較
    1. NULL - 左值始終小於右值
    2. 數值類(INTEGER/REAL)- 按數值比較
    3. TEXT - 逐字符比較
    4. BLOB - 用 memcmp() 函數比較


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM