| 層級 | 參數/命令 | 作用範圍 | 可修改性 |
|---|---|---|---|
| OS Locale (系統級) | LANG / 控制面板區域選項 | 應用程序默認代碼頁、排序、日期格式 | 隨時可改,需重啟進程生效 |
| DB2CODEPAGE (實例級) | db2set DB2CODEPAGE=xxx | DB2 客戶端/服務端代碼頁轉換判定 | 實例級可改,db2stop/start 生效 |
| DATABASE CODESET (數據庫級) | CREATE DATABASE ... CODESET xxx | 數據庫磁盤存儲編碼、排序規則 | 建庫時固定,不可修改 |
# Linux/UNIX 臨時
export LANG=zh_CN
# 永久:/etc/profile 或 ~/.bash_profile
# Windows 永久
控制面板 → 區域和語言選項 → 進階 → 默認系統語言選 中文(簡體/繁體)
# 設置為 UTF-8 (1208)
db2set DB2CODEPAGE=1208
db2stop; db2start
# 驗證
db2set -all | grep DB2CODEPAGE
常用代碼頁:1208=UTF-8, 1386=GBK, 936=GB2312, 1252=Windows Latin1, 819=ISO8859-1。
# 創建 UTF-8 中文數據庫
db2 "CREATE DATABASE mydb USING CODESET UTF-8 TERRITORY CN"
# TERRITORY CN 影響排序、日期、貨幣格式
遷移必須重建:編碼錯誤只能 EXPORT → DROP → CREATE (新編碼) → IMPORT,或使用 db2move 跨庫遷移。
| 現象 | 根因 | 對策 |
|---|---|---|
| 中文亂碼/問號 | 應用編碼 ≠ DB2CODEPAGE ≠ DB CODESET | 三層統一為 UTF-8,JDBC URL 加 charSet=UTF-8 |
| 排序錯誤 | TERRITORY 不匹配 (US vs CN) | 建庫指定 TERRITORY CN,或會話 SET CURRENT LOCALE LC_CTYPE=zh_CN |
| 導入報錯 SQL3006N | 數據文件編碼 ≠ DB CODESET | db2move import 指定 CODEPAGE=1208 或預轉換文件 |