字段超长问题:中文字符不一定都是占2个字节

简介:

在Oracle中,经常把字段的类型设置成varchar2。

以前都是认为每一个中文字符都是占用2个字节,即varchar2(30)只能存放15个中文或30个英文。

今天偶然发现,这个其实和Oracle的配置是相关的,用以下语句查询:
   select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET';
可以查询到当前数据库的字符集,如果value=GB2312,那么一个汉字占用2个字节,如果value=AL32UTF8,那么一个汉字占用3个字节。

在Java中可以使用以下方式取得string的长度:

     private   int  getLength(NcsTextField t)  {
        
try {
            
int iLength = new String(t.getText().getBytes("UTF8"),"iso-8859-1").length();
            
return iLength;
        }
 catch (Exception e) {
            
return t.getText().length();
        }

    }
这样取得的一个汉字占3个字节,

如果把UTF8换成GB2312则一个汉字占2个字节



    本文转自永春博客园博客,原文链接:http://www.cnblogs.com/firstyi/archive/2007/09/18/897542.html,如需转载请自行联系原作者

相关文章
|
20天前
|
存储
汉字和数字站几个字节,估算内存占用情况
该文内容讲述了字符和字节的关系:中文标点占3字节,英文字母或数字占1字节,英文标点也占1字节。1字节等于8字位,1字位是1个二进制数。此外,还介绍了存储单位的换算:1B=8b,1KB=1024B,1MB=1024KB,1GB=1024MB。其中,b代表字位,B代表字节,KB是千字节,MB是兆字节,GB是吉字节。
20 2
|
1月前
ASCII编码字符数量
ASCII编码字符数量
47 2
|
存储 Java
用代码查询ASCII码和Unicode码表序号
用代码查询ASCII码和Unicode码表序号
用代码查询ASCII码和Unicode码表序号
006.显示变量所占字节数
006.显示变量所占字节数
79 0
|
存储 数据处理
位,字节与字
位、字节、字(bits, Bytes, words)是计算机数据存储的单位。位是最小的存储单位,每一个位存储一个1位的二进制码(0 or 1),一个字节由8位(8个二进制0 or 1 串)组成。而字通常为16、32或64个位组成。
681 0
|
监控
中文字节长度引起的数据丢失
最近在写一个应用监控的项目,使用netty作为数据传输。因为刚开始写,没有使用Protobuf之类的作为编码工具,只是使用的是netty自带的LengthFieldBasedFrameDecoder作为报文解析工具,自定义编码解码类,实现数据传输。
140 0
|
Java API
一个汉字占几个字节你真的记住了吗?
一个汉字占几个字节是不是不太好记呢,编码不一样则占字节位就不一样。下面用一段简短的代码了解一下一个汉字占几个字节。
320 0
一个汉字占几个字节你真的记住了吗?
一个汉字占多少字节?
原文:一个汉字占多少字节? GBK编码,一个汉字占两个字节。 UTF-16编码,通常汉字占两个字节,CJKV扩展B区、扩展C区、扩展D区中的汉字占四个字节(一般字符的Unicode范围是U+0000至U+FFFF,而这些扩展部分的范围大于U+20000,因而要用两个UTF-16)。
2001 0