Oracle裏有三個字符集
數據庫字符集:
查詢方法
select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');
客戶端字符集:
查詢方法
select * from nls_instance_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');
會話字符集:
查詢方法
select * from nls_session_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');
NLS_LANG參數格式
NLS_LANG=language_territory.client character set
Language: 顯示oracle消息,校驗,日期命名
Territory:指定默認日期、數字、貨幣等格式
Client character set:指定客戶端將使用的字符集
例如:NLS_LANG=AMERICAN_AMERICA.US7ASCII
AMERICAN是語言,AMERICA是地區,US7ASCII是客戶端字符集
數據庫字符集是創建數據庫時指定的,後期雖然可以修改,有限制,極不推薦修改。該字符集主要是來控制數據的。
客戶端字符集,依然沒有發現有什麼用途,如果有了解的朋友建議回覆。該字符集設置在spfile文件中,與環境等等無關。該字符集可以通過Oracle參數修改。
會話字符集,該字符集默認是繼承客戶端字符集的。如果環境變量中有設置,會覆蓋默認字符集。
經過實驗驗證,在安裝Oracle的設備上,只要數據庫字符集與會話字符集相同,SQLPLUS查詢結果就不會亂碼。也不需要設置環境變量。
通常情況,三個字符集建議相同。
例如:
當創建數據庫的時候,國家選中國,語言選簡體中文,字符集選AL32UTF8。
SIMPLIFIED CHINESE_CHINA.AL32UTF8
數據庫字符集指定後,有DBA權限的同學,可以通過修改客戶端字符集,修改完成後,重啓數據庫,就可以應用。
alter system set nls_language=SIMPLIFIED CHINESE scope=spfile;
alter system set nls_territory=CHINA scope=spfile;
在設置了客戶端字符集之後,會話字符集默認繼承客戶端字符集,可以不用設置。但是工作中,往往數據庫是由其他朋友創建的,數據庫字符集和客戶端字符集不一樣,因此此時爲了能夠正常顯示,需要設置環境變量覆蓋會話字符集。
windows添加環境變量
變量名:NLS_LANG
變量值:AMERICAN_AMERICA.AL32UTF8
Linux
添加該段到Oracle用戶或者Root用戶的配置文件中。
例如,添加到oracle用戶的配置文件 /home/oracle/.bash_profile
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
接下來編譯一下
source /home/oracle/.bash_profile