PL/SQL 出現(xiàn)亂碼(就是問號 ???)
1. 先查看一下數(shù)據(jù)庫服務端的編碼
> select * from nls_database_parameters ;
Paste_Image.png
2. 先查看一下數(shù)據(jù)庫客戶端的編碼
- 查看客戶端實例字符集
> select * from nls_instance_parameters ;
Paste_Image.png
- 查看客戶端會話字符集
> select * from nls_session_parameters ;
image.png
- 如果是
windows
系統(tǒng),為了保險南蹂,檢查一下注冊表乐严。按快捷建win + r
輸入regedit
回車 碳竟,打開注冊表HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb10g_home1
image.png
可以看出服務端是AL32UTF8(utf-8升級版)的編碼疫鹊,而客戶端是簡體中文(GBK)
我們要做的就是把客戶端的編碼和服務端的統(tǒng)一就ok了
- 編碼組成由兩部分 :
語言.編碼
睹簇,所以可能有編碼相同,語言不同的組成方式
常見語言:SIMPLIFIED CHINESE_CHINA
(中文) 和AMERICAN_AMERICA
(英文)
常見GBK編碼:ZHS16GBK
常見UTF8編碼:AL32UTF8
- 常見組合:
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
和AMERICAN_AMERICA.AL32UTF8
3. 解決方法就是增加一個變量提供給客戶端引用
把此語句執(zhí)行結果設置成 NLS_LANG 的值咬最,就能保存客戶端的編碼和服務端一致
-- 查詢oracle服務端語言和編碼
select userenv('language') from dual;
-
方法一:增加一個系統(tǒng)變量,重啟電腦(推薦)
Paste_Image.png -
方法二:windwos命令執(zhí)行(CMD),只在當前窗口有效
- 常用中文字符集
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
- 常用unicode字符集
set NLS_LANG=american_america.AL32UTF8
- 常用中文字符集
-
為了保險词爬,最好把注冊表的值也同步修改, 右鍵修改,把編碼部分改為
AL32UTF8
image.png
image.png