天天看點

Oracle資料庫的varchar2和nvarchar2、LENGTH 與 LENGTHB 的差別 一、查詢Oracle服務端與用戶端編碼 二、varchar2 與nvarchar2的差別 三<1>、LENGTH 與  LENGTHB 的差別

一、查詢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()