首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 三層字符集架構深度解析:OS Locale、DB2CODEPAGE、DATABASE CODESET 設置、修改與遷移實戰

     編輯:DB2 教學

三層字符集架構與職責

層級參數/命令作用範圍可修改性
OS Locale (系統級)LANG / 控制面板區域選項應用程序默認代碼頁、排序、日期格式隨時可改,需重啟進程生效
DB2CODEPAGE (實例級)db2set DB2CODEPAGE=xxxDB2 客戶端/服務端代碼頁轉換判定實例級可改,db2stop/start 生效
DATABASE CODESET (數據庫級)CREATE DATABASE ... CODESET xxx數據庫磁盤存儲編碼、排序規則建庫時固定,不可修改

設置與修改實戰

1. OS Locale 設置中文

# Linux/UNIX 臨時
export LANG=zh_CN
# 永久:/etc/profile 或 ~/.bash_profile

# Windows 永久
控制面板 → 區域和語言選項 → 進階 → 默認系統語言選 中文(簡體/繁體)

2. DB2CODEPAGE 實例級設置

# 設置為 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。

3. DATABASE CODESET 建庫指定 (不可逆)

# 創建 UTF-8 中文數據庫
db2 "CREATE DATABASE mydb USING CODESET UTF-8 TERRITORY CN"
# TERRITORY CN 影響排序、日期、貨幣格式

遷移必須重建:編碼錯誤只能 EXPORT → DROP → CREATE (新編碼) → IMPORT,或使用 db2move 跨庫遷移。

編碼不匹配典型故障與排查

最佳實踐原則

  • **全鏈路 UTF-8**:OS Locale=UTF-8、DB2CODEPAGE=1208、DB CODESET=UTF-8、應用/JDBC/ODBC 全指定 UTF-8。
  • 遷移項目先跑 db2look -e 導出 DDL,確認目標庫 CODESET 一致。
  • 監控 db2diag.log 關鍵字 codepage conversion 捕獲轉換錯誤。
三層字符集架構圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象根因對策
中文亂碼/問號應用編碼 ≠ 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 CODESETdb2move import 指定 CODEPAGE=1208 或預轉換文件