SQLite 資料型別是一個用來指定任何物件的資料型別的屬性。SQLite 中的每一列,每個變數和表示式都有相關的資料型別。
您可以在建立表的同時使用這些資料型別。SQLite 使用一個更普遍的動態型別系統。在 SQLite 中,值的資料型別與值本身是相關的,而不是與它的容器相關。
SQLite 儲存類
每個儲存在 SQLite 資料庫中的值都具有以下儲存類之一:
儲存類
描述
NULL 值是一個 NULL 值。
INTEGER 值是一個帶符號的整數,根據值的大小儲存在 1、2、3、4、6 或 8 位元組中。
REAL 值是一個浮點值,儲存為 8 位元組的 IEEE 浮點數字。
TEXT 值是一個文字字串,使用資料庫編碼(UTF-8、UTF-16BE 或 UTF-16LE)儲存。
BLOB 值是一個 blob 資料,完全根據它的輸入儲存。
SQLite 的儲存類稍微比資料型別更普遍。INTEGER 儲存類,例如,包含 6 種不同的不同長度的整數資料型別。
SQLite 親和(Affinity)型別
SQLite支援列的親和型別概念。任何列仍然可以儲存任何型別的資料,當資料插入時,該欄位的資料將會優先採用親緣型別作為該值的儲存方式。SQLite目前的版本支援以下五種親緣型別:
親和型別
TEXT 數值型資料在被插入之前,需要先被轉換為文字格式,之後再插入到目標欄位中。
NUMERIC 當文字資料被插入到親緣性為NUMERIC的欄位中時,如果轉換操作不會導致資料資訊丟失以及完全可逆,那麼SQLite就會將該文字資料轉換為INTEGER或REAL型別的資料,如果轉換失敗,SQLite仍會以TEXT方式儲存該資料。對於NULL或BLOB型別的新資料,SQLite將不做任何轉換,直接以NULL或BLOB的方式儲存該資料。需要額外說明的是,對於浮點格式的常量文字,如"30000.0",如果該值可以轉換為INTEGER同時又不會丟失數值資訊,那麼SQLite就會將其轉換為INTEGER的儲存方式。
INTEGER 對於親緣型別為INTEGER的欄位,其規則等同於NUMERIC,唯一差別是在執行CAST表示式時。
REAL 其規則基本等同於NUMERIC,唯一的差別是不會將"30000.0"這樣的文字資料轉換為INTEGER儲存方式。
NONE 不做任何的轉換,直接以該資料所屬的資料型別進行儲存。
SQLite 親和型別(Affinity)及型別名稱
下表列出了當建立 SQLite3 表時可使用的各種資料型別名稱,同時也顯示了相應的親和型別:
資料型別
INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8
CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
BLOB
no datatype specified
NONE
REAL
DOUBLE
DOUBLE PRECISION
FLOAT
NUMERIC
DECIMAL(10,5)
BOOLEAN
DATE
DATETIME
Boolean 資料型別
SQLite 沒有單獨的 Boolean 儲存類。相反,布林值被儲存為整數 0(false)和 1(true)。
Date 與 Time 資料型別
SQLite 沒有一個單獨的用於儲存日期和/或時間的儲存類,但 SQLite 能夠把日期和時間儲存為 TEXT、REAL 或 INTEGER 值。
日期格式
TEXT 格式為 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。
REAL 從公元前 4714 年 11 月 24 日格林尼治時間的正午開始算起的天數。
INTEGER 從 1970-01-01 00:00:00 UTC 算起的秒數。
您可以以任何上述格式來儲存日期和時間,並且可以使用內建的日期和時間函式來自由轉換不同格式。
SQLite 資料型別是一個用來指定任何物件的資料型別的屬性。SQLite 中的每一列,每個變數和表示式都有相關的資料型別。
您可以在建立表的同時使用這些資料型別。SQLite 使用一個更普遍的動態型別系統。在 SQLite 中,值的資料型別與值本身是相關的,而不是與它的容器相關。
SQLite 儲存類
每個儲存在 SQLite 資料庫中的值都具有以下儲存類之一:
儲存類
描述
NULL 值是一個 NULL 值。
INTEGER 值是一個帶符號的整數,根據值的大小儲存在 1、2、3、4、6 或 8 位元組中。
REAL 值是一個浮點值,儲存為 8 位元組的 IEEE 浮點數字。
TEXT 值是一個文字字串,使用資料庫編碼(UTF-8、UTF-16BE 或 UTF-16LE)儲存。
BLOB 值是一個 blob 資料,完全根據它的輸入儲存。
SQLite 的儲存類稍微比資料型別更普遍。INTEGER 儲存類,例如,包含 6 種不同的不同長度的整數資料型別。
SQLite 親和(Affinity)型別
SQLite支援列的親和型別概念。任何列仍然可以儲存任何型別的資料,當資料插入時,該欄位的資料將會優先採用親緣型別作為該值的儲存方式。SQLite目前的版本支援以下五種親緣型別:
親和型別
描述
TEXT 數值型資料在被插入之前,需要先被轉換為文字格式,之後再插入到目標欄位中。
NUMERIC 當文字資料被插入到親緣性為NUMERIC的欄位中時,如果轉換操作不會導致資料資訊丟失以及完全可逆,那麼SQLite就會將該文字資料轉換為INTEGER或REAL型別的資料,如果轉換失敗,SQLite仍會以TEXT方式儲存該資料。對於NULL或BLOB型別的新資料,SQLite將不做任何轉換,直接以NULL或BLOB的方式儲存該資料。需要額外說明的是,對於浮點格式的常量文字,如"30000.0",如果該值可以轉換為INTEGER同時又不會丟失數值資訊,那麼SQLite就會將其轉換為INTEGER的儲存方式。
INTEGER 對於親緣型別為INTEGER的欄位,其規則等同於NUMERIC,唯一差別是在執行CAST表示式時。
REAL 其規則基本等同於NUMERIC,唯一的差別是不會將"30000.0"這樣的文字資料轉換為INTEGER儲存方式。
NONE 不做任何的轉換,直接以該資料所屬的資料型別進行儲存。
SQLite 親和型別(Affinity)及型別名稱
下表列出了當建立 SQLite3 表時可使用的各種資料型別名稱,同時也顯示了相應的親和型別:
資料型別
親和型別
INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8
INTEGER
CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB
TEXT
BLOB
no datatype specified
NONE
REAL
DOUBLE
DOUBLE PRECISION
FLOAT
REAL
NUMERIC
DECIMAL(10,5)
BOOLEAN
DATE
DATETIME
NUMERIC
Boolean 資料型別
SQLite 沒有單獨的 Boolean 儲存類。相反,布林值被儲存為整數 0(false)和 1(true)。
Date 與 Time 資料型別
SQLite 沒有一個單獨的用於儲存日期和/或時間的儲存類,但 SQLite 能夠把日期和時間儲存為 TEXT、REAL 或 INTEGER 值。
儲存類
日期格式
TEXT 格式為 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。
REAL 從公元前 4714 年 11 月 24 日格林尼治時間的正午開始算起的天數。
INTEGER 從 1970-01-01 00:00:00 UTC 算起的秒數。
您可以以任何上述格式來儲存日期和時間,並且可以使用內建的日期和時間函式來自由轉換不同格式。