Oracle 客戶端 NLS_LANG 的設置


參考鏈接1: https://blog.csdn.net/xinzhan0/article/details/78311417#t3
參考鏈接2: https://blog.csdn.net/xinzhan0/article/details/78311562

1、操作系統本身有字符集  ---locale -a 或者chcp
2、oracle數據庫軟件有字符集 
3、oracle軟件的操作系統本身也有字符集

AL32UTF8
【AL】支持所有語言(All Language)
【32】每字符最多占用32位(4字節)
【UTF8】編碼為UTF-8

WE8MSWIN1252
【WE】支持西歐語言(Western Europe)
【8】每字符需要占用8位(單字節)
【MSWIN1252】編碼為CP1252

US7ASCII
【US】表示美國(United States)
【7】每字符需要占用7位
【ASCII】編碼為ASCII

字符集說白了是一個集合 ,是一張表,這個表有兩列,左面這列是字符是所有要存儲的字符。
字符有很多字符 ,比如我們講中文字符:
左面這列就是中國人常用的所有的中文字符 ,有漢字、英文字母有數字還有一些特殊的符號 ,在左面都出現是我們中文要使用的所有的字符
右邊是一個編碼,從1號2、3、4、5、6 ,將來提到1的時候就對應着一個字符
所以說字符集就是字符和編碼的這么一個對應表

常用字符集:
US7ASCII
ZHS16CGB231280
AL32UTF8
AF16UTF16
ZHS16GBK

數據庫字符集

SQL> select * from nls_database_parameters;

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.1.0

客戶端字符集

SQL> select * from nls_instance_parameters;             

PARAMETER														 VALUE
------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------
NLS_LANGUAGE													 AMERICAN
NLS_TERRITORY														 AMERICA
NLS_SORT
NLS_DATE_LANGUAGE
NLS_DATE_FORMAT
NLS_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_ISO_CURRENCY
NLS_CALENDAR
NLS_TIME_FORMAT
NLS_TIMESTAMP_FORMAT
NLS_TIME_TZ_FORMAT
NLS_TIMESTAMP_TZ_FORMAT
NLS_DUAL_CURRENCY
NLS_COMP														 BINARY
NLS_LENGTH_SEMANTICS												 BYTE
NLS_NCHAR_CONV_EXCP												 FALSE

會話字符集

SQL> select * from nls_session_parameters;   

PARAMETER														 VALUE
------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------
NLS_LANGUAGE													                 AMERICAN
NLS_TERRITORY														 AMERICA
NLS_CURRENCY														 $
NLS_ISO_CURRENCY													 AMERICA
NLS_NUMERIC_CHARACTERS												 .,
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_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" ----------.bash_profile里面的參數只是在修改會話的字符集,也可以直接export指定
NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" -------對應的分別是語言、地區、字符集。
字符集要求一致,但是語言設置卻可以不同,語言設置建議用英文。如字符集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk
NLS作用優先級別:Sql function > alter session> 環境變量或注冊表> 參數文件> 數據庫默認參數

環境模擬
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8" 登入界面顯示英文,在linux sqlplus表中插入注釋,查看注釋正常顯示為中文,sqlplus develop中也正常顯示,但是sqlplus develop不能改注釋,只能在linux中改
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" 登入界面顯示中文,在linux中插入注釋,查看住注釋正常顯示為中文,sqlplus develop中也正常顯示,但是sqlplus develop不能改注釋,只能在linux中改
若想要在sqlplus developer中支持中文的查看和修改(例如修改表的注釋),則在環境變量中加NLS_LANG=AMERICAN_AMERICA.AL32UTF8 --注意:這里只要字符集為AL32UTF8就可以,前面的語言可以任意

Windows  echo %NLS_LANG%
Linux    env | grep NLS_LANG 

例如:數據庫為GBK

oracle@pdcsh021v03:~> echo $LANG
zh_CN.UTF-8
oracle@pdcsh021v03:~> echo $NLS_LANG
SIMPLIFIED CHINESE_CHINA.AL32UTF8

一、修改會話的字符集與數據庫的字符集一致

數據庫查詢結果

創建環境變量(只需要字符集一致),創建結果與nls_session_parameters的值對應,PL/SQL顯示結果為中文


注:客戶端的字符集是在沒有設置NLS_LANG環境變量時,會話默認的字符集


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM