一、查詢Oracle服務端與用戶端編碼
select userenv('language') from dual;--服務端編碼
select parameter,value from nls_database_parameters where parameter like 'NLS_CHARACTERSET';--用戶端編碼
二、varchar2 與nvarchar2的差別
1、對于英文字元:
varchar2(6)可以最多存放6個字元
2、對于中文字元:
資料庫字元集為UTF-8,varchar2(6) 最多存放2個字元
資料庫字元集為ZHS16GBK,varchar2(6) 最多存放3個字元
3、不管是中文字元,還是英文字元,nvarchar2(6)都可以存放6個字元
三<1>、LENGTH 與 LENGTHB 的差別
SELECT LENGTH('CANDIDE') "Length incharacters" FROM DUAL;
Length in characters
--------------------
7
The next example assumes a double-bytedatabase character set.
SELECT LENGTHB ('CANDIDE') "Length inbytes" FROM DUAL;
Length in bytes
---------------
14
三<2>、LENGTH 與 LENGTHB 的示例
在不同的資料庫,因為字元集的不同,LENGTHB得到的值可能會不一樣。如ZHS16GBK采用兩個byte位來定義一個漢字。而在UTF8,采用3個byte。
[email protected](rac1)> SELECT USERENV('LANGUAGE') FROM DUAL;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
SQL>select length('安慶') from dual;
2
SQL>select lengthb('安慶') from dual;
4
SQL>select length('AnQing') from dual;
6
SQL>select lengthb('AnQing') from dual;
6
通過這個示例,我們可以看出來,Length 和 Lengthb 函數的一個重要用處,就是用來判斷記錄值裡是否有中文内容。
如果有中文,那麼Length() != Lengthb()
如果沒有中文,那麼Length() == Lengthb()