ORACLE資料庫NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET區別?
使用Select * from nls_database_parameter去檢視資料庫的字符集,發現查到兩個字符集,NLS_CHARACTERSET 和NLS_NCHAR_CHARACTERSET。如下:
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 ZHS16GBK
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
------------------------------ --------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXF
F AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXF
F AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
PARAMETER VALUE
------------------------------ --------------------
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0
已選擇20行。
網上查閱了一下,得到以下的結果:
NLS_CHARACTERSET是資料庫字符集,NLS_NCHAR_CHARACTERSET是國家字符集
ORACLE中有兩大類字元型資料,VARCHAR2是按照資料庫字符集來儲存資料。而NVARCHAR2是按照國家字符集儲存資料的。同樣,CHAR和NCHAR也一樣,一是資料庫字元符,一是國家字符集。
字符集不同,二進位制碼的組合就不同。
比如有一串二進位制資訊:1101,0110,1101,0000,1011,1001,1111,1010,按照16位雙位元組GBK字符集理解,可以代表“中國”兩個字。如果單位元組的字符集,這一串二進位制代表ASC碼為214、208、185、250的四個怪字元。
這就是字符集的作用,就是以什麼樣的形式理解資訊。