記錄兩次在 IBM 2650 伺服器安裝環境時遭遇的 Oracle 中文亂碼問題,從作業系統語言設定到 .NET 資料存取層的完整排查過程。
第一次安裝使用 IBM 導引光碟,過程中未注意時區與字元集選項。Windows Server 2003 安裝完成後安裝 Oracle,過程提示「無法建立捷徑」但強制完成。匯入資料後發現中文變亂碼,連同 EditPlus、WinRAR 等工具的視窗、右鍵選單也出現亂碼。
控制台 → 語言選項 → 將預設語言改為中文 → 重啟後,右鍵選單中文恢復正常,透過 PL/SQL Developer 查看 Oracle 資料庫中文也正常。但配置 ASP.NET 網站後,網頁查詢 Oracle 資料仍顯示亂碼。
編寫三支測試程式驗證:
初步判斷 .NET 資料存取機制與 VB6 不同,導致字元轉換異常。進一步比對兩台機器的 Oracle 字元集:
| 環境 | NLS_CHARACTERSET |
|---|---|
| 本機開發環境 | ZHS16GBK |
| IBM 伺服器 | WE8MSWIN1252 |
字元集不一致是根因。嘗試修改 Oracle 字元集失敗,最終重灌作業系統並正確設定語言/字元選項後問題解決。
CharSet=UTF8 或對應編碼。<connectionStrings>
<add name="OracleConn"
connectionString="Data Source=ORCL;User Id=scott;Password=tiger;CharSet=UTF8;"
providerName="System.Data.OracleClient" />
</connectionStrings>
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');