分类: Oracle
2008-01-29 12:46:52
用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
**************************************************
**************************************************
本人测试如下:
Create Table li_test02
(Id Number, Name Varchar2(64), code Char(64) )
Select * From li_test02
ID Name code
1 1 test01 0001
2 10 test002 00002
3 100 test03大狼 00002
4 1111 test04 00002
Select Id,vsize(Id),Name,vsize(Name),lengthb(name),code,vsize(code) From li_test02
Id vsize(id) Name vsize(Name) lengthb(name) code vsize(code)
1 1 2 test01 6 6 0001 64
2 10 2 test002 7 7 00002 64
3 100 2 test03大狼 10 10 00002 64
4 1111 3 test04 6 6 00002 64
字符型: vsize 反应的是所占用的字节(bytes) ,对于varchar2,显示的是实际占用的字节.对于char,显示的是char定义时的长度.
Number :没发现规律