1. 程式人生 > >ORACLE資料庫NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET區別?

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_CALENDAR                   GREGORIAN
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的四個怪字元。
這就是字符集的作用,就是以什麼樣的形式理解資訊。