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

Oracle 字元集深度解析:NLS_LANG 三要素、三端一致性檢查與常用查詢指令

     編輯:Oracle 資料庫基礎

什麼是 Oracle 字元集?

字元集是位元組資料的解碼符號集合,具大小與包容關係。NLS_LANG 參數控制用戶端字元集行為,格式:

NLS_LANG = LANGUAGE_TERRITORY.CHARACTERSET
-- 例:AMERICAN_AMERICA.ZHS16GBK
  • LANGUAGE:錯誤訊息、月份名稱語言。
  • TERRITORY:日期/數字格式、貨幣符號、週起始日。
  • CHARACTERSET:唯一影響資料儲存與傳輸解碼的關鍵。

兩資料庫匯入匯出僅需 CHARACTERSET 相同 即可,語言/地域可不同(建議統一用 AMERICAN_AMERICA 避免訊息亂碼)。

三端字元集一致性檢查

端點查詢方式範例結果
Server 端SELECT USERENV('LANGUAGE') FROM DUAL;AMERICAN_AMERICA.ZHS16GBK
或SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%';NLS_CHARACTERSET=ZHS16GBK
Client 端Windows:登錄表 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_\NLS_LANGAMERICAN_AMERICA.ZHS16GBK
Linux/Unix:echo $NLS_LANG 或 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK同上
DMP 檔小檔:UltraEdit 16進位看第 2-3 位元組0354 → ZHS16GBK
大檔:cat exp.dmp | od -x | head -1 | awk '{print $2$3}' | cut -c3-6同上
轉換:SELECT NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX')) FROM DUAL;ZHS16GBK

Session 級參數優先序

ALTER SESSION > 環境變數/註冊表 > 參數檔 > 資料庫預設
SELECT * FROM NLS_SESSION_PARAMETERS;  -- 當前會話實際生效值

常見亂碼場景與對策

  • Client ≠ Server:中文顯示亂碼 → 統一 Client NLS_LANG 為 Server 字元集。
  • DMP ≠ Server:匯入報 IMP-00031 → 修改 DMP 檔字元集標記或調整 Client NLS_LANG 匹配 DMP。
  • 字元集無包容關係(GBK ↔ BIG5):需先轉檔(iconv/UTL_I18N)再匯入,不可強行修改標記。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved