Oracle中文字如何計算長度

一般計算英文字的長度,就是一個字元就一個長度,但遇到中文字,Oracle的處理結果就不太相同了,以下是一些測試語法及結果,

Oracle會因為資料庫安裝時設定的字元編碼不同,使得在不同的編碼下,定義相同長度的字串欄位,可以寫入的最大長度可能不同。

測試環境如下,

  • 兩台 Oracle資料庫環境,A資料庫編碼為UTF8,B資料庫編碼為Big5。
  • 測式字串為『123測試中文字長度』

首先,可以利用下面SQL查詢目前資料庫的編碼為何?

select userenv('language') from dual;

TRADITIONAL CHINESE_TAIWAN.AL32UTF8→UTF8
TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5→Big5

在A資料庫執行下面SQL及計算結果,

select '123測試中文字長度' as 測試字串,
       length('123測試中文字長度') as 直接看字元數,
       length(rawtohex(convert('123測試中文字長度', 'AL32UTF8')))/2 as 系統用二進位看
from dual;


在B資料庫執行下面SQL及計算結果,

select '123測試中文字長度' as 測試字串,
       length('123測試中文字長度') as 直接看字元數,
       length(rawtohex(convert('123測試中文字長度', 'ZHT16BIG5')))/2 as 系統用二進位看
from dual;


比較結果,對於UTF8的編碼,1個中文字相當於3個字元,而Big5的編碼,1個中文字相當於2個字元。

reference web:
http://blog.darkthread.net/post-2006-11-24-kb-oracle.aspx
http://www.blueshop.com.tw/board/FUM20041006161839LRJ/BRD200911121425027SG.html


留言

這個網誌中的熱門文章

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務

Oracle 例外控制(Exception Control)

Oracle 工作排程 DBMS_JOB 筆記