PL/SQL Developer 查詢結果中文顯示亂碼,核心原因是客戶端字元集與資料庫不匹配。透過設定 NLS_LANG 環境變數即可徹底解決。
NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBKTRADITIONAL CHINESE_TAIWAN.ZHT16BIG5AMERICAN_AMERICA.AL32UTF8-- 在 PL/SQL Developer 執行
SELECT USERENV('LANGUAGE') FROM DUAL;
-- 應回傳剛設定的值,如 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
NLS_LANG 決定客戶端字元集語言_地區.字元集NLS_DATABASE_PARAMETERS 決定NLS_LANG 錯誤會導致轉碼失敗產生亂碼| 資料庫字元集 | 建議 NLS_LANG 值 |
|---|---|
| ZHS16GBK | SIMPLIFIED CHINESE_CHINA.ZHS16GBK |
| ZHT16BIG5 | TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5 |
| AL32UTF8 | AMERICAN_AMERICA.AL32UTF8 |
| UTF8 | AMERICAN_AMERICA.UTF8 |
| US7ASCII | SIMPLIFIED CHINESE_CHINA.ZHS16GBK (需配合應用層轉碼) |
若同機器連接不同字元集資料庫,可建立批次檔啟動 PL/SQL Developer:
@echo off set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK start "" "C:\Program Files\PLSQL Developer\plsqldev.exe"
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_... 下同樣有 NLS_LANG,環境變數優先級較高