PL/SQL 查詢 Oracle 數據庫,中文顯示為問號 (???)。嘗試過修改註冊表 NLS_LANG、設置環境變量、重啟服務均無效。
SELECT * FROM NLS_DATABASE_PARAMETERS → ZHS16GBKHKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1\NLS_LANG → SIMPLIFIED CHINESE_CHINA.ZHS16GBK建表 SQL 腳本在記事本中編輯,默認保存為 ANSI/GBK,但數據庫期望 UTF-8,導致寫入數據時編碼錯位。
客戶端工具 (PL/SQL)
↓ NLS_LANG 設置
網絡傳輸層 (OCI/OJDBC)
↓ 字符集轉換
數據庫服務端 (NLS_DATABASE_PARAMETERS)
↓ 存儲
數據文件 / 內存
關鍵點:任何一環編碼不一致都會導致亂碼。文件編碼屬於「寫入端」源頭,最容易被忽視。
?characterEncoding=utf8SELECT DUMP('中文', 1016) FROM DUAL 檢查實際存儲字節亂碼問題 90% 是編碼不一致。當客戶端、驅動、服務端配置都正確時,請檢查數據源頭文件編碼。記事本默認 ANSI 是巨坑,專業開發請使用支持編碼顯示和轉換的編輯器。