date: 2019-06-25 09:29
status: draft
title: ‘Oracle 數據庫中文亂碼的解釋和更改’
涉及三個字符集的是否兼容的問題
- 操作系統的字符集
- 客戶端的字符集
- 數據庫的字符集(數據庫服務器端的的字符集)
操作系統的字符集設置
- 如果是Windows 系統的計算機,基本不用考慮操作系統的字符集,按照本人理基本都會支持Windows 系統
- Linux 系統,(稍後進行補充)
客戶端的字符集的設置
這個是客戶端自己設置的字符集,代表安裝Oracle 的時候的個性化設置。
對應的參數是NLS_LANG,如果客戶端未設置,此時則取的是安裝時數據庫的默認參數。
數據庫的字符集設置
安裝數據庫的時候,進行配置的字符集設置
如果沒有設置爲ZHS16GBK(這個是允許中文輸入的和UTF-8存儲方式一樣) ,聽說有的還是Al32UTF-8 (這個同樣也是UTF-8) 的一種存儲格式
解決亂碼問題:
- 查看數據庫的字符集
通過SQL plus 進入system用戶
select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';
查看數據庫的字符集
如果是ZHS16GBK 或者 Al32UTF-8都可以,如果不是進行修改
將數據庫環境字符集換爲ZHS16GBK
- 首先以sysdba的身份登錄上去 conn /as sysdba
conn system/password;
- 關閉數據庫
shutdown immediate;
- 以mount打來數據庫,
startup mount
- 設置session
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
- 啓動數據庫
alter database open;
- 修改字符集
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
- 關閉,重新啓動
shutdown immediate;
startup
- 更改客戶端字符集
如果亂碼了就設置客戶端編碼格式
計算機(右鍵) —>屬性—>高級系統設置—>高級—>環境變量—>新建,個人建議新建用戶變量,變量名輸入:“NLS_LANG”,變量值輸入:“SIMPLIFIEDCHINESE_CHINA.ZHS16GBK”。點擊確定即可,到此我們就設置完了。