Oracle中文字如何計算長度
一般計算英文字的長度,就是一個字元就一個長度,但遇到中文字,Oracle的處理結果就不太相同了,以下是一些測試語法及結果,
Oracle會因為資料庫安裝時設定的字元編碼不同,使得在不同的編碼下,定義相同長度的字串欄位,可以寫入的最大長度可能不同。
測試環境如下,
首先,可以利用下面SQL查詢目前資料庫的編碼為何?
TRADITIONAL CHINESE_TAIWAN.AL32UTF8→UTF8
TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5→Big5
在A資料庫執行下面SQL及計算結果,
在B資料庫執行下面SQL及計算結果,
比較結果,對於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
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
留言
張貼留言