首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PL/SQL Developer 中文輸入亂碼終極解決:NLS_LANG、字體、系統區域設置三步走

     編輯:程式設計綜合問答

問題現象

  • 數據庫查詢結果正常顯示中文。
  • SQL 窗口輸入中文顯示方框/亂碼。
  • 設置環境變量 `NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK` 後反而導致系統字體缺失、遊戲無法運行。

根因分析

  1. PL/SQL Developer 為 32 位程序,需 32 位 Oracle Client (Instant Client) 支持。
  2. 字體回退機制失效:編輯器字體 (如 Courier New) 不含中文字形,系統未正確回退到微軟雅黑/宋體。
  3. NLS_LANG 設置錯誤或衝突:系統級環境變量影響所有 Oracle 客端,若數據庫字符集為 `AL32UTF8`,客戶端應設 `AMERICAN_AMERICA.AL32UTF8` 或 `SIMPLIFIED CHINESE_CHINA.AL32UTF8`,而非 `ZHS16GBK` (簡體中文 GBK)。
  4. 系統區域設置非中文:Windows「區域與語言」→「管理」→「非 Unicode 程序語言」未設置為中文,導致 ANSI 應用 (含舊版 PL/SQL) 字符集解析錯誤。

標準解決流程 (按優先級)

第一步:修正系統區域設置 (最關鍵,解決 90% 情況)

  1. 控制面板 → 時鐘和區域 → 區域 → 管理 選項卡。
  2. 「非 Unicode 程序的語言」點擊「更改系統區域設置」。
  3. 選擇 **中文 (簡體,中國)**,勾選「Beta 版: 使用 Unicode UTF-8 提供全球語言支持」(Win10 1903+)。
  4. **重啟電腦** 生效。

第二步:配置 PL/SQL Developer 字體

  1. 工具 → 首選項 → 用戶介面 → 字體。
  2. 編輯器字體選 **Consolas** (英文) + **微軟雅黑** (中文回退) 或直接選 **微軟雅黑**、**等線**、**Sarasa Mono SC** (等寬中英文)。
  3. 大小 10-12pt,應用並重啟 PL/SQL。

第三步:設置正確的 NLS_LANG (僅當前用戶環境變量)

  1. 右鍵「此電腦」→ 屬性 → 高級系統設置 → 環境變量。
  2. **用戶變量** (非系統變量) 新建:
    變量名:`NLS_LANG`
    變量值:`SIMPLIFIED CHINESE_CHINA.AL32UTF8` (若數據庫字符集為 UTF8)
    或 `SIMPLIFIED CHINESE_CHINA.ZHS16GBK` (若數據庫確為 GBK,較少見)
  3. **不要**在系統變量設置,避免影響其他軟件。
  4. 重啟 PL/SQL Developer 生效。

第四步:驗證 Oracle Client 位數匹配

  • PL/SQL Developer 32 位 → 必須安裝 32 位 Oracle Instant Client (basic + sqlplus)。
  • 64 位數據庫服務端無關,客戶端位數由開發工具決定。
  • 配置 `ORACLE_HOME` 指向 32 位 Client 目錄,`PATH` 前置 `%ORACLE_HOME%`。

避坑指南:為什麼你的操作導致字體缺失、遊戲報錯

  • 在**系統變量**設置 `NLS_LANG` 影響全局所有 Oracle 相關進程,甚至干擾非 Oracle 程序的字符集判斷。
  • 修改系統區域設置時未重啟,或勾選 Beta UTF-8 導致舊版 ANSI 應用 (如某些遊戲啟動器) 解碼失敗。
  • 誤刪/禁用系統字體 (如 `msyh.ttc` 微軟雅黑) 導致回退失敗。

驗證腳本

```sql -- 在 PL/SQL 窗口執行 SELECT USERENV('LANGUAGE') FROM DUAL; -- 輸出應包含 AL32UTF8 或 ZHS16GBK,與 NLS_LANG 一致 SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER LIKE '%LANG%' OR PARAMETER LIKE '%TERRITORY%'; ```
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved