- SQLite的官網提到,目前大部份的SQL資料庫引擎(除了SQLite之外)都使用靜態、嚴格的資料類型。 使用靜態類型時,資料值的數據類型由儲存這項資料的資料欄位型態決定。
SQLite的資料類型,使用更通用的動態類型系統(dynamic type system)。 在SQLite中,資料值的資料類型與資料值本身相關聯,而不是與存放資料的資料欄位型態相關聯。 SQLite的動態類型系統向下相容其他資料庫引擎中更常見的靜態類型系統,因為在靜態類型資料庫上工作的SQL語句應該在SQLite中以相同的方式工作。 但是,SQLite中的動態類型允許它執行傳統的嚴格類型資料庫中無法實現的操作。
- 每一個存放在SQLite資料庫中的資料值,都具有下列的資料型態中的一個資料類型:
- NULL : 空值。
- INTEGER : 整數。是帶有正負值的整數,可能會使用1, 2, 3, 4, 6, 8個位元組(Bytes)來存放資料,實際使用的Bytes數,以存放的值來決定。
- REAL : 浮點數值。以 8 Bytes來存放IEEE浮點數。
- TEXT : 文字字串值。以資料庫的文字編碼方式:UTF-8, UTF-16BE, UTF-16LE來儲存資料。
- BLOB : 二進位大型物件(Binary Large OBject)。
- 沒有Boolean值的資料儲存型別,SQLite3用0來儲存False(假),用1來儲存True(真)。
- 沒有日期(Date)、時間(Time)的資料儲存型別,SQLite內建的日期和時間函數,將日期和時間存儲為TEXT,REAL或INTEGER值。
如果是TEXT,存為ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
如果是REAL,是記錄一個Julian的日期數,是西元前4714年11月24日格林威治中午以來的天數。
如果是INTEGER,是紀錄1970-01-01 00:00:00 UTC以來的秒數(Unix Time)。 - 近似型別(Type Affinity)
SQLite3資料庫中的每一個資料欄位,都會被指定為下列型別之一的近似型別:TEXT, NUMERIC, INTEGER, REAL, BLOB。
欄位近似型別的決定規則(Determination Of Column Affinity),規則依序如下:
- 宣告的資料類型包含字串“INT”,視為INTEGER 的近似型別。
- 宣告的資料類型包含字串“CHAR”、“CLOB”或“TEXT”,視為TEXT的近似型別。 VARCHAR / NVARCHAR 類型包含字串“CHAR”,視為TEXT的近似型別。
- 宣告的類型包含字串“BLOB”、或未指定類型,視為BLOB的近似型別。
- 宣告的類型包含字串“REAL”、“FLOA”或“DOUB”,視為REAL的近似型別。
- 上述似規則以外,視為NUMERIC的近似型別。
- 近似型別歸類舉例:
CREATE TABLE宣告或CAST5轉換式 歸類 規則 INT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT, UNSIGNED BIG INT, INT2, INT8 INTEGER i CHARACTER(20), VARCHAR(255), VARYING CHARACTER(255), NCHAR(55), NATIVE CHARACTER(70), NVARCHAR(100), TEXT,CLOB TEXT ii BLOB, no datatype specified BLOB iii REAL, DOUBLE, DOUBLE PRECISION, FLOAT REAL iv NUMERIC, DECIMAL(10,5), BOOLEAN, DATE, DATETIME NUMERIC v - SQLite Studio資料欄位可以選擇的選項:
BIGINT, BLOB, BOOLEAN, CHAR, DATE, DATETIME, DECIMAL, DOUBLE, INTEGER, INT, NONE, NUMERIC, REAL, STRING, TEXT, VARCHAR
參考資料:Datatypes In SQLite Version 3 https://www.sqlite.org/datatype3.html
沒有留言:
張貼留言