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

解決 Oracle SQL*Plus 中文顯示亂碼:NLS_LANG 環境變數正確設定指南

     編輯:關於SqlServer

問題現象

在 Windows 環境下使用 SQL*Plus 連接 Oracle 資料庫時,中文資料顯示為亂碼(如問號、方塊字元或亂碼符號),修改註冊表後問題依舊存在。

根本原因

Oracle 客戶端依據 NLS_LANG 環境變數決定字元集轉換方式。若此變數未設定或設定錯誤,客戶端會使用預設字元集(通常為 US7ASCII),導致無法正確解碼資料庫中的中文資料(通常儲存為 ZHS16GBK、AL32UTF8 或 WE8MSWIN1252)。

解決方案:新增系統環境變數

  1. 右鍵「此電腦」→「內容」→「進階系統設定」→「環境變數」
  2. 在「系統變數」區域點選「新增」
  3. 變數名稱:NLS_LANG
  4. 變數值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  5. 確定儲存,重新開啟 SQL*Plus 視窗測試

字元集對照表(常見場景)

資料庫字元集客戶端作業系統建議 NLS_LANG 設定值
ZHS16GBK (簡體中文)Windows (GBK/CP936)SIMPLIFIED CHINESE_CHINA.ZHS16GBK
AL32UTF8 (Unicode)Windows (UTF-8)SIMPLIFIED CHINESE_CHINA.AL32UTF8
AL32UTF8Linux/macOS (UTF-8)SIMPLIFIED CHINESE_CHINA.AL32UTF8
WE8MSWIN1252Windows 西歐語系AMERICAN_AMERICA.WE8MSWIN1252
ZHT16MSWIN950 (繁體中文)Windows (Big5/CP950)TRADITIONAL CHINESE_TAIWAN.ZHT16MSWIN950

驗證設定是否生效

-- 在 SQL*Plus 中執行
SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_LANGUAGE';
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';

若 NLS_LANGUAGE 顯示 SIMPLIFIED CHINESE,NLS_CHARACTERSET 與資料庫一致,即表示設定正確。

進階疑難排解

情況一:設定後仍亂碼

  • 確認資料庫實際字元集:SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
  • 若資料庫為 AL32UTF8,客戶端 NLS_LANG 必須設為 .AL32UTF8,且命令提示字元需支援 UTF-8(Win10 建議啟用「Beta 版:使用 Unicode UTF-8 提供全球語言支援」)
  • 檢查註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_{OracleHome}\NLS_LANG 是否覆蓋環境變數,若存在請刪除或修改一致

情況二:PL/SQL Developer / Toad 正常但 SQL*Plus 亂碼

這類工具通常內建字元集處理邏輯,不完全依賴 NLS_LANG。SQL*Plus 為純命令列工具,嚴格遵循 NLS_LANG 設定。

情況三:Linux/macOS 環境

# 臨時設定(當前 shell 有效)
export NLS_LANG=SIMPLIFIED_CHINESE_CHINA.AL32UTF8

# 永久設定(加入 ~/.bashrc 或 ~/.zshrc)
echo 'export NLS_LANG=SIMPLIFIED_CHINESE_CHINA.AL32UTF8' >> ~/.bashrc
source ~/.bashrc

最佳實踐建議

  1. 統一開發、測試、生產環境的 NLS_LANG 設定,避免跨環境亂碼
  2. 新專案建議資料庫採用 AL32UTF8 字元集,支援全語系、表情符號、特殊符號
  3. 使用連線池(如 HikariCP、DBCP)時,在 JDBC URL 加入 ?characterEncoding=UTF-8 或設定 oracle.jdbc.defaultNChar=true
  4. 定期備份資料庫前先驗證字元集一致性,避免匯入/匯出資料損壞
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved