首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 Oracle 亂碼問題:NLS_LANG 環境變數正確設定指南

     編輯:Oracle 資料庫相關知識

使用 SQL*Plus 連線 Oracle 時出現 ???? 或亂碼,主因是資料庫字元集與客戶端 NLS_LANG 設定不匹配。本文提供各作業系統、Shell 環境的標準設定值與驗證步驟。

核心原理

NLS_LANG = <語言>_<地區>.<字元集> 三部分組成,字元集必須與資料庫字元集一致(或為其超集)。

-- 查詢資料庫字元集
SELECT * FROM nls_database_parameters WHERE parameter IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
-- 典型輸出:AL32UTF8, ZHS16GBK, JA16SJIS, WE8ISO8859P1

依字元集設定 NLS_LANG

資料庫字元集建議 NLS_LANG 值適用語系
AL32UTF8 / UTF8AMERICAN_AMERICA.AL32UTF8通用(含中日韓)
ZHS16GBKSIMPLIFIED CHINESE_CHINA.ZHS16GBK簡體中文
ZHT16BIG5 / ZHT16MSWIN950TRADITIONAL CHINESE_TAIWAN.ZHT16MSWIN950繁體中文
JA16SJIS / JA16SJISTILDEJAPANESE_JAPAN.JA16SJIS日文
KO16MSWIN949KOREAN_KOREA.KO16MSWIN949韓文
WE8ISO8859P1 / WE8MSWIN1252AMERICAN_AMERICA.WE8MSWIN1252西歐語系

各環境設定語法

Linux/Unix - Bash / sh / ksh

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
# 永久生效:寫入 ~/.bash_profile 或 /etc/profile

Linux/Unix - csh / tcsh

setenv NLS_LANG AMERICAN_AMERICA.AL32UTF8
# 永久生效:寫入 ~/.cshrc

Windows CMD(暫時)

set NLS_LANG=AMERICAN_AMERICA.AL32UTF8

Windows 永久(環境變數)

  1. Win+Pause → 進階系統設定 → 環境變數
  2. 系統變數 → 新增/編輯 NLS_LANG = AMERICAN_AMERICA.AL32UTF8
  3. 重新開啟 CMD/PowerShell 生效

Oracle 10g/11g/12c+ 額外環境變數

版本變數路徑範例
10g/11gORA_NLS33$ORACLE_HOME/ocommon/nls/data
12c+ORA_NLS10$ORACLE_HOME/nls/data
# Bash 範例
export ORA_NLS10=$ORACLE_HOME/nls/data

驗證步驟

  1. 設定 NLS_LANG 後重新啟動 SQL*Plus。
  2. 執行 SELECT * FROM nls_session_parameters WHERE parameter='NLS_LANG'; 確認 Session 級參數已套用。
  3. 查詢含中文/日文資料的表,確認顯示正常。

常見誤區

  • 只設定語言地區(如 AMERICAN_AMERICA)而省略字元集 → 預設使用 US7ASCII,導致非 ASCII 字元全變 ?。
  • 客戶端字元集與資料庫字元集不兼容(如資料庫 AL32UTF8,客戶端設 ZHS16GBK) → 產生錯誤轉換或資料截斷。
  • Windows 註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_... 下也有 NLS_LANG,若環境變數未設定會讀取註冊表值,需同步修改。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved