環境
操作系統版本: Windows 7
PL/SQL 版本: 12.0.1.1814
原因
由於 Oracle 服務器端和客戶端字符集編碼不一致引起的。
注意點
寫在最前面,減少踩坑!!!
網上教程大多未強調這些注意點,像我這樣的 Oracle 小白就完美踩坑而過。
- 設置完環境變量
NLS_LANG
後,我個人重啓PL/SQl
多次不生效,重啓操作系統才生效。 - 設置客戶端和服務器端的字符集後,需要再次
UPDATE
後,此時SELECT
纔不是亂碼。 - 執行完
SQL
語句,記得commit
,否則其他會話無法獲取最新數據。
解決方法
服務端
檢查 Oracle 服務器端字符編碼是否一致。
-- 檢查字符集是否一致
select userenv('language') from dual;
-- AMERICAN_AMERICA.AL32UTF8
select * from v$nls_parameters a where a.PARAMETER = 'NLS_CHARACTERSET';
-- AL32UTF8
客戶端
設置客戶端字符集
在系統環境變量中,新增變量 NLS_LANG
,設置字符集爲:AMERICAN_AMERICA.AL32UTF8
(服務器端的字符集)。
我個人重啓 PL/SQL 不生效,重啓系統才生效。
驗證是否生效
打開 PL/SQL
工具的:幫助–支持信息–信息 選項卡里進行檢查,在“Character Sets”下面,有一項是:“NLS_LANG”, 檢查是否與環境變量設置的NLS_LANG
一致,一致即生效。
設置字體字符集
打開 PL/SQL
工具的:配置–首選項–用戶界面–字體–主字體,設置字體字符集爲“西歐語言”,默認爲“中文 GB2312”。
微信公衆號:daodaotest