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. LENGTH2 uses UCS2 codepoints. LENGTH4 uses UCS4 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 --7
select lengthb('adfad') "bytesLengthIs" from dual --5
select lengthb('adfad合理') "bytesLengthIs" from dual --11
select vsize('adfad合理') "bytesLengthIs" from dual --11
select lengthc('adfad合理')"bytesLengthIs" from dual --7
結論:在utf-8的字元集下
lengthb=vsize
lengthc=length
疑問:中文字元怎麼會佔用了3個byte?而不是2個。是utf-8字元集的原因?
誰知道??????
參考文獻:Oracle9i SQL Reference Release 2 (9.2)
..................................................
用String的getBytes方法測試了一下.
結論是utf-8的中文字元佔用3個位元組,gbk的中文字元佔用2個位元組,iso-8859-1的中文字元被識別為佔用2個位元組,iso不支援中文字元的編碼,應該是都當成某個拉丁字母了.Oracle沒有關係,oracle只是負責儲存資料.
可以先用 select * from v$nls_parameters 看看oracle的字元集
下邊是測試的類:
import java.io.UnsupportedEncodingException;
public class TextEncoding
{
/**
*
* @author:sunflower
* @date: 2007-1-24 上午10:09:40
* @todo: 調用的是String的自己的getBytes(encoding)方法,
* 使用指定的字元集將此 String 解碼為位元組序列,並將結果儲存到一個新的位元組數組中.
* @param content
* @param encode
* @return
*/
public static byte[] getBytes(String content,String charsetName)
throws UnsupportedEncodingException{
return content.getBytes(charsetName);
}
/**
*
* @author:sunflower
* @date: 2007-1-24 上午10:19:40
* @todo: 調用的是String的自己的getBytes()方法,
* 使用平台預設的字元集將此 String 解碼為位元組序列,並將結果儲存到一個新的位元組數組中。
* @param content
* @return
*/
public static byte[] getBytes(String content){
return content.getBytes();
}
public static void main(String[]args){
String content="1e寶寶";
byte[] len;
try{
len=getBytes(content,"UTF-8");
System.out.println(" the byte array length is "+len.length);
len=getBytes(content,"GBK");
System.out.println(" the byte array length is "+len.length);
len=getBytes(content,"ISO-8859-1");
System.out.println(" the byte array length is "+len.length);
}catch(Exception e){
System.out.println("Can 't recognize");
}
// System.out.println("the content byte[] length is "+);
}
}
輸出 :
the byte array length is 8
the byte array length is 6
the byte array length is 4
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1492768