SQL 資料型別 (Data Types)

在建立資料表時,每個欄位都需要指定資料型別。選擇正確的資料型別不僅能確保資料的正確性,也能提升資料庫的效能。

數值型別 (Numeric Types)

用來儲存數字,包括整數和小數:

型別說明範例
INT / INTEGER整數1, -100, 9999
SMALLINT小整數-32768 ~ 32767
BIGINT大整數大範圍整數
DECIMAL(p, s)精確小數,p 是總位數,s 是小數位數DECIMAL(10,2) 可存 12345678.99
FLOAT浮點數3.14159
DOUBLE雙精度浮點數更大範圍的浮點數

數值型別可以搭配聚合函數使用,例如 SUM()AVG() 等。

字串型別 (String Types)

用來儲存文字:

型別說明範例
CHAR(n)固定長度字串,長度為 nCHAR(10) 固定佔 10 字元
VARCHAR(n)可變長度字串,最大長度為 nVARCHAR(255)
TEXT長文字文章內容、備註
CHAR 會以空白填滿到指定長度,VARCHAR 則只佔用實際使用的長度。一般建議使用 VARCHAR。

日期時間型別 (Date/Time Types)

用來儲存日期和時間:

型別格式範例
DATEYYYY-MM-DD2024-12-25
TIMEHH:MM:SS14:30:00
DATETIMEYYYY-MM-DD HH:MM:SS2024-12-25 14:30:00
TIMESTAMPYYYY-MM-DD HH:MM:SS自動記錄時間戳記

更多日期函數請參考 SQL Date

布林型別 (Boolean)

儲存真/假值:

  • TRUE / FALSE
  • 1 / 0

NULL 值

NULL 代表「沒有值」或「未知」,和空字串 '' 或數字 0 不同。

CREATE TABLE customers (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,     -- 不允許 NULL
  phone VARCHAR(20) NULL         -- 允許 NULL
);
-- 這兩者意義不同
INSERT INTO customers (phone) VALUES (NULL);  -- 不知道電話
INSERT INTO customers (phone) VALUES ('');    -- 知道沒有電話

判斷 NULL 值要使用 IS NULL 而非 =