參考鏈接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環境變量時,會話默認的字符集