Linux亂碼和數(shù)據(jù)庫(kù)亂碼的問題簡(jiǎn)單排查
在本地的虛擬機(jī)環(huán)境一直湊合著用英文,今天想看看中文的東西都顯示亂碼,下定決心要把問題解決了。
如果直接打印文本內(nèi)容,通過(guò)putty也會(huì)顯示亂碼。
[ora11g@rac1 ~]$ cat aa.sh
δ? ε??ο?θ?ζ―δ?δ??ζ?θ―
[ora11g@rac1 ~]$
這個(gè)時(shí)候很可能是putty的編碼轉(zhuǎn)換的問題,通過(guò)查看putty的設(shè)置,如上,可以看到應(yīng)該選為utf-8。
選為UTF-8以后,重新打印,就沒有問題了。
[ora11g@rac1 ~]$ cat aa.sh
你好,這是一個(gè)測(cè)試
第一個(gè)問題解決了,第二個(gè)問題又來(lái)了,來(lái)看看數(shù)據(jù)庫(kù)層面的亂碼問題。
[ora11g@rac1 ~]$ sqlplus n1/n1
SQL> select *from test;
ID NAME
---------- -----------------------------
1 ??????
這個(gè)時(shí)候看看環(huán)境變量NLS_LANG的設(shè)置,如果為空,很可能會(huì)出問題。
[ora11g@rac1 ~]$ echo $NLS_LANG
[ora11g@rac1 ~]$
簡(jiǎn)單設(shè)置一下,這個(gè)最好和數(shù)據(jù)庫(kù)層面的字符集要一致。
[ora11g@rac1 ~]$ echo $NLS_LANG
american_america.AL32UTF8
再來(lái)查看一下,就沒有問題了。
SQL> select *from test;
ID NAME
---------- -----------------------------
1 突破玩法界限
當(dāng)然了,我的這個(gè)問題剛好數(shù)據(jù)庫(kù)層面是完全支持的,這樣就省去了很多額外的工作,如果數(shù)據(jù)庫(kù)層面的字符集不支持,那很可能就得重建庫(kù)來(lái)改變字符集了。
select *from nls_database_parameters SQL> / PARAMETER VALUE ------------------------------ ---------------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET AL32UTF8 NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_RDBMS_VERSION 11.2.0.3.0 |
另外系統(tǒng)層面的亂碼,網(wǎng)上查看了一下,有些人建議修改/etc/sysconfig/i18n的設(shè)置。
[ora11g@rac1 ~]$ cat /etc/sysconfig/i18*
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
如果修改為中文的,一定要注意設(shè)置的值,在我本地做測(cè)試,是不需要修改的,本身就支持,我修改的時(shí)候,竟然改錯(cuò)了,結(jié)果重新登錄及報(bào)了一大堆的錯(cuò)誤,如下:
[ora11g@rac1 caipiao]$ su - ora11g
Password:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (zn_CN.UTF-8): No such file or directory
如果修改,應(yīng)該改為zh_CN,算是一個(gè)低級(jí)錯(cuò)誤。
posted on 2014-09-04 09:51 順其自然EVO 閱讀(183) 評(píng)論(0) 編輯 收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄