環境
操作系統版本: 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
設置字體字符集
打開 PL/SQL 工具的:配置—首選項—用戶界面—字體—主字體,設置字體字符集為“西歐語言”,默認為“中文 GB2312”。