在部署重構版測試環境時,須要建立Oracle數據庫,使用dbca建立數據庫以後沒有注意數據庫自己的字符集,致使後續全部的數據庫腳本執行後中文亂碼。最後的解決辦法是清掉全庫數據,再修改字符集,重啓數據庫。linux
系統或者程序運行的環境就是一個咱們常見的locale。而設置數據庫locale最簡單的方法就是設置NLS_LANG這個環境參數。在linux中NLS_LANG是一個環境變量,在windows中NLS_LANG是寫在註冊表中的。NLS_LANG這個參數由三個組成部分,分別是語言(language), 區域(territory)和字符集(character set),格式以下:程序員
NLS_LANG = language_territory.charset
咱們平時最多見的就是:AMERICAN_AMERICA.ZHS16GBK
和SIMPLIFIED CHINESE_CHINA.ZHS16GBK
sql
NLS_LANG的做用官網是這樣說的:shell
意思就是說:數據庫
檢查Oracle Server字符集最經常使用的方法有兩種windows
select * from nls_database_parameters;
userenv函數返回當前會話(session)的相關信息。如下sql語句能夠查詢當前會話鏈接的數據庫字符集服務器
select userenv('language') from dual;
有關userenv('parameter')
返回值的官網介紹以下session
意思就是:返回的是當前會話使用的language和territory。characterset是數據庫的字符集。oracle
userenv函數的具體使用和當前會話字符集的取值詳見如下連接app
一旦數據庫建立後,數據庫的字符集理論上講是不能改變的。所以,在設計和安裝之初考慮使用哪種字符集十分重要。根據Oracle的官方說明,字符集的轉換是從子集到超集受支持,反之不行。若是兩種字符集之間根本沒有子集和超集的關係,那麼字符集的轉換是不受oracle支持的。對數據庫server而言,錯誤的修改字符集將會致使不少不可測的後果,可能會嚴重影響數據庫的正常運行,因此在修改以前必定要確認兩種字符集是否存在子集和超集的關係。通常來講,除非萬不得已,咱們不建議修改oracle數據庫server端的字符集。
如下是修改server端字符集的方法——不建議使用
SQL> conn /as sysdba SQL> shutdown immediate; SQL> startup mount SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL> alter database open; SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * ERROR at line 1: ORA-12712: new character set must be a superset of old character set 提示咱們的字符集:新字符集必須爲舊字符集的超集,這時咱們能夠跳過超集的檢查作更改: SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK; SQL> select * from v$nls_parameters; 重啓檢查是否更改完成: SQL> shutdown immediate; SQL> startup SQL> select * from v$nls_parameters;
具體使用方法參見:oracle服務器和客戶端字符集的查看和修改
windows查看nls_lang
set NLS_LANG
linux查看nls_lang
echo $NLS_LANG
修改客戶端字符集只須要修改上述檢查結果中的NLS_LANG便可。
▶數據庫字符集
select * from nls_database_parameters ; select userenv('language') from dual;
▶實例字符集
select * from nls_instance_parameters;
▶會話字符集
select * from nls_session_parameters;
詳見oracle官網:NLS Database Parameters
記得幫我點贊哦!
精心整理了計算機各個方向的從入門、進階、實戰的視頻課程和電子書,按照目錄合理分類,總能找到你須要的學習資料,還在等什麼?快去關注下載吧!!!
念念不忘,必有迴響,小夥伴們幫我點個贊吧,很是感謝。
我是職場亮哥,YY高級軟件工程師、四年工做經驗,拒絕鹹魚爭當龍頭的斜槓程序員。
聽我說,進步多,程序人生一把梭
若是有幸能幫到你,請幫我點個【贊】,給個關注,若是能順帶評論給個鼓勵,將不勝感激。
職場亮哥文章列表:更多文章
本人全部文章、回答都與版權保護平臺有合做,著做權歸職場亮哥全部,未經受權,轉載必究!