2019-09-18

SQLite3的資料類型

  • SQLite的官網提到,目前大部份的SQL資料庫引擎(除了SQLite之外)都使用靜態、嚴格的資料類型。 使用靜態類型時,資料值的數據類型由儲存這項資料的資料欄位型態決定。
    SQLite的資料類型,使用更通用的動態類型系統(dynamic type system)。 在SQLite中,資料值的資料類型與資料值本身相關聯,而不是與存放資料的資料欄位型態相關聯。 SQLite的動態類型系統向下相容其他資料庫引擎中更常見的靜態類型系統,因為在靜態類型資料庫上工作的SQL語句應該在SQLite中以相同的方式工作。 但是,SQLite中的動態類型允許它執行傳統的嚴格類型資料庫中無法實現的操作。

  • 每一個存放在SQLite資料庫中的資料值,都具有下列的資料型態中的一個資料類型:
    1. NULL : 空值。
    2. INTEGER : 整數。是帶有正負值的整數,可能會使用1, 2, 3, 4, 6, 8個位元組(Bytes)來存放資料,實際使用的Bytes數,以存放的值來決定。
    3. REAL : 浮點數值。以 8 Bytes來存放IEEE浮點數。
    4. TEXT : 文字字串值。以資料庫的文字編碼方式:UTF-8, UTF-16BE, UTF-16LE來儲存資料。
    5. BLOB : 二進位大型物件(Binary Large OBject)。
    6. 沒有Boolean值的資料儲存型別,SQLite3用0來儲存False(假),用1來儲存True(真)。
    7. 沒有日期(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),規則依序如下:
    1. 宣告的資料類型包含字串“INT”,視為INTEGER 的近似型別。
    2. 宣告的資料類型包含字串“CHAR”、“CLOB”或“TEXT”,視為TEXT的近似型別。 VARCHAR / NVARCHAR 類型包含字串“CHAR”,視為TEXT的近似型別。
    3. 宣告的類型包含字串“BLOB”、或未指定類型,視為BLOB的近似型別。
    4. 宣告的類型包含字串“REAL”、“FLOA”或“DOUB”,視為REAL的近似型別。
    5. 上述似規則以外,視為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

沒有留言: