SQLite 3 中的資料類型

來源:互聯網
上載者:User

。SQLite使用動態類型系統,在SQLite中,值的資料類型和值本身,而不是和它的容器,關聯在一起的。SQLite的動態類型系統和其他資料庫引擎的靜態類型系統是相容的,這樣在靜態類型的資料庫上執行的SQL語句也可以在SQLite中執行。

1.0 儲存類和資料類型

每個儲存在SQLite資料庫中(或被資料庫引擎操縱的)的值都有下列儲存類的一個:

  • NULL。空值。
  • INTEGER。有符號整數,儲存在1、2、3、4、6或8個位元組中。
  • REAL。浮點數,儲存為8位元組的IEEE浮點數。
  • TEXT。文本串,使用資料庫編碼(UTF-8, UTF-16BE或UTF-16LE)儲存。
  • BLOB。大塊資料。

注意儲存類(storage class)比資料類型更一般。INTEGER儲存類,例如,包含6種長度不同的整數資料類型。這在磁碟中是有區別的。不過一旦INTEGER值從磁碟讀到內容中進行處理的時候,這些值會轉化為更普通的資料類型(8位有符號整數)。因此在大部分情況下,儲存類和資料類型是不易分辨的,這兩個術語可以交換使用。

在SQLite 3 資料庫中,任何列,除了INTEGER PRIMARY KEY列,都可以儲存任何儲存類的值。

SQL語句中的所有值,不管是SQL語句中嵌入的字面值,還是先行編譯的SQL語句中的參數,都有一個隱式的儲存類。在下面描述的條件下,在查詢執行階段,資料庫引擎可能會在數字儲存類(INTEGER和REAL)和TEXT儲存類之間轉換。

1.1 Boolean資料類型

SQLite沒有單獨的Boolean儲存類,相反,Booean值以整數0(false)和1(true)儲存。

1.2 日期和時間資料類型

SQLite沒有為儲存日期和/或時間設定專門的儲存類,相反,內建的日期和時間函數能夠把日期和時間作為TEXT,REAL或INTEGER值儲存:

  • TEXT:作為ISO8601字串("YYYY-MM-DD HH:MM:SS.SSS")。
  • REAL:作為Julian天數,……
  • INTEGER:作為Unix Time,即自1970-01-01 00:00:00 UTC以下的秒數。

2.0 類型相像(type affinity)

為了最大化SQLite和其他資料庫引擎之間的相容性,SQLite支援列的”類型相像“的概念。這裡重要的思想是,類型是推薦的,不是必需的。任何列仍然能夠儲存任何類型的資料。只是某些列,能夠選擇優先使用某種儲存類。這個對列的優先儲存類稱作它的”相像“。

SQLite 3 資料庫中的每個列都賦予下面類型相像中的一個:

  • TEXT
  • NUMERIC
  • INTEGER
  • REAL
  • NONE

帶有TEXT相像的列會使用儲存類NULL、TEXT或BLOB來儲存所有的資料。如果資料資料被插入到帶有TEXT相像的列中,它會在插入前轉換為文字格式設定。

帶有NUMERIC相像的列可以使用所有5個儲存類來包含值。當文本資料被插入到一個NUMERIC列,文本的儲存類會被轉換成INTEGER或REAL(為了優先),如果這個轉換是無損的和可逆的話。如果TEXT到INTEGER或REAL的轉換是不可能的,那麼值會使用TEXT儲存類儲存。不會試圖轉換NULL或BLOB值。

……

2.1 列相像的確定

列相像是由列聲明的類型確定的,規則是按照下面的順序:

1. 如果聲明的類型包含字串”INT“那麼它被賦予INTEGER相像。

2. 如果列聲明的類型包含任何字串”CHAR“,”CLOB“,或”TEXT“,那麼此列擁有TEXT相像。注意類型VARCHAR包含”CHAR“,因此也會賦予TEXT相像。

3. 如果列聲明的類型包含”BLOB“或沒有指定類型,那麼此列擁有NONE相像。

4. 如果列聲明的類型包含任何”REAL“,”FLOA“,或”DOUB“,那麼此列擁有REAL相像。

5. 其他情況,相像是NUMERIC。

注意規則的順序是重要的。宣告類型為“CHARINT”的列同時匹配規則1和規則2,但第一個規則會優先採用,因此此列的相像是INTEGER。

2.2 相像樣本

樣本 相像結果 規則
INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8
INETGER 1
CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
TEXT 2
BLOB
未指定資料類型
NONE 3
REAL
DOUBLE
DOUBLE PRECISION
FLOAT
REAL 4
NUMERIC
DECIMAL(10, 5)
BOOLEAN
DATE
DATETIME
NUMERIC 5

注意“FLOATING POINT”類型會指定INTEGER相像,而不是REAL相像,因為”INT“在末尾。”STRING“類型會擁有NUMERIC相像,而不是TEXT。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.