許多 DBA 對 `CODEPAGE` 概念模糊:建庫時指定 `CODESET UTF-8`,卻發現 `CODEPAGE` 固定為 1208(UTF-8 對應代碼頁),以為兩者等價甚至無實際作用。實則不然——Code Page 是 DB2 執行字符編碼轉換的核心標識,直接決定跨庫連接、複寫、聯邦查詢、應用驅動程式連接時的字元正確性。
同一 Code Set 在不同平台(Windows/Linux/AIX)對應的 Code Page 完全相同,這是跨平台遷移不產生編碼偏移的基礎。
現象:來源庫 Code Page 1208 (UTF-8),目標庫 Code Page 950 (Big5)。`CONNECT TO` 成功,但 `INSERT`/`SELECT` 或複寫時報 `SQL30081N` / `SQL3303N` 轉換表缺失或字元無法映射。
原因:DB2 連接建立階段不驗證字符轉換可行性,僅在首次跨 Code Page 數據傳輸時載入轉換表(`sqllib/conv/` 下 `.cnv` 檔)。若目標平台缺少對應 `.cnv`、或字元確實無法映射(如 Emoji 寫入 Big5),即拋錯。
-- 查看資料庫 Code Page 與 Code Set
GET DB CFG FOR | grep -i -e "code page" -e "codeset"
-- 列出平台支援的所有 Code Page 映射
db2 "SELECT CODEPAGE, CODESET FROM SYSIBM.SYSCODEPAGES"
-- 測試特定字元在目標 Code Page 下是否可表達
-- (需在目標資料庫執行)
VALUES CHR(HEX('F09F9880')) -- 嘗試插入 Emoji 😀,若目標非 UTF-8 會報錯

結語:Code Page 非理論概念,而是字元在 DB2 內部流轉的「護照號」。統一 UTF-8 (1208) 是消除 90% 編碼故障的銀彈;若歷史系統必須共存異構 Code Page,請建立「轉換表完整性檢查」與「應用端編碼對齊清單」兩道防線,將亂碼風險壓縮至最低。