熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle的函數vsize和length的區別討論

2013-11-13 22:12:10  來源: Oracle 

  The length functions return the length of char LENGTH calculates length using characters as defined by the input character set

LENGTHB uses bytes instead of characters LENGTHC uses Unicode complete characters LENGTH uses UCS codepoints LENGTH uses UCS codepoints

length函數返回字符的長度它使用定義好的輸入的字符集計算長度
lengthb使用bytes代替字符

VSIZE returns the number of bytes in the internal representation of expr

vsize 返回內部表示的字節的數目internal representation of expr誰能解釋一下

看sql示例

select length(adfad合理) bytesLengthIs from dual

select lengthb(adfad) bytesLengthIs from dual

select lengthb(adfad合理) bytesLengthIs from dual

select vsize(adfad合理) bytesLengthIs from dual

select lengthc(adfad合理)bytesLengthIs from dual

結論在utf的字符集下
lengthb=vsize
lengthc=length

疑問中文字符怎麼會占用了個byte?而不是是utf字符集的原因?
誰知道??????

參考文獻Oraclei SQL Reference Release ()
 

  

  用String的getBytes方法測試了一下
結論是utf的中文字符占用個字節gbk的中文字符占用個字節iso的中文字符被識別為占用個字節iso不支持中文字符的編碼應該是都當成某個拉丁字母了Oracle沒有關系oracle只是負責存儲數據
可以先用 select * from v$nls_parameters 看看oracle的字符集
下邊是測試的類:

import javaioUnsupportedEncodingException;

public class TextEncoding {

/**
*
* @author:sunflower
* @date: 上午::
* @todo: 調用的是String的自己的getBytes(encoding)方法
* 使用指定的字符集將此 String 解碼為字節序列並將結果存儲到一個新的字節數組中
* @param content
* @param encode
* @return
*/
public static byte[] getBytes(String contentString charsetName)
throws UnsupportedEncodingException{
return contentgetBytes(charsetName);
}

/**
*
* @author:sunflower
* @date: 上午::
* @todo: 調用的是String的自己的getBytes()方法
* 使用平台默認的字符集將此 String 解碼為字節序列並將結果存儲到一個新的字節數組中
* @param content
* @return
*/
public static byte[] getBytes(String content){
return contentgetBytes();
}

public static void main(String[]args){
String content=e寶寶;
byte[] len;
try{
len=getBytes(contentUTF);
Systemoutprintln( the byte array length is +lenlength);
len=getBytes(contentGBK);
Systemoutprintln( the byte array length is +lenlength);
len=getBytes(contentISO);
Systemoutprintln( the byte array length is +lenlength);
}catch(Exception e){
Systemoutprintln(Can t recognize);
}

// Systemoutprintln(the content byte[] length is +);
}

}

輸出 :
the byte array length is
the byte array length is
the byte array length is

  Trackback: x?PostId=


From:http://tw.wingwit.com/Article/program/Oracle/201311/18450.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.