PLSQL Developer 中文亂碼踩坑記

環境

操作系統版本: Windows 7
PL/SQL 版本: 12.0.1.1814

原因

由於 Oracle 服務器端和客戶端字符集編碼不一致引起的。

注意點

寫在最前面,減少踩坑!!!


網上教程大多未強調這些注意點,像我這樣的 Oracle 小白就完美踩坑而過。

  • 設置完環境變量 NLS_LANG 後,我個人重啟 PL/SQl 多次不生效,重啟操作系統才生效。
  • 設置客戶端和服務器端的字符集後,需要再次 UPDATE 後,此時 SELECT 才不是亂碼。
  • 執行完 SQL 語句,記得 commit
    ,否則其他會話無法獲取最新數據。

解決方法

服務端

檢查 Oracle 服務器端字符編碼是否一致。

<code>-- 檢查字符集是否一致 
select userenv('language') from dual;
-- AMERICAN_AMERICA.AL32UTF8

select * from v$nls_parameters a where a.PARAMETER = 'NLS_CHARACTERSET';
-- AL32UTF8/<code>

客戶端

設置客戶端字符集

在系統環境變量中,新增變量 NLS_LANG,設置字符集為:AMERICAN_AMERICA.AL32UTF8(服務器端的字符集)。


我個人重啟 PL/SQL 不生效,重啟系統才生效。

驗證是否生效


打開 PL/SQL 工具的:幫助—支持信息—信息 選項卡里進行檢查,在“Character Sets

”下面,有一項是:“NLS_LANG”, 檢查是否與環境變量設置的 NLS_LANG 一致,一致即生效。


設置字體字符集

打開 PL/SQL 工具的:配置—首選項—用戶界面—字體—主字體,設置字體字符集為“西歐語言”,默認為“中文 GB2312”。


分享到:


相關文章: