JAVA String类型数据的字节长度
2013-03-01 10:24
302 查看
http://blog.csdn.net/a19881029/article/details/7902701
问题描述:
向数据库中插入一条String类型的数据,在数据库中该字段定义为varchar2(64),一开始使用String.length()来进行数据的长度校验,如果数据是纯英文,那么是没有问题的,但是如果数据中包含中文,校验可以通过,但是在数据入库时经常会报数据超长。
问题分析:
既然问题是数据超长,那么问题应该就是出在数据长度校验上,也就是出在String.length()这个方法上,来看看jdk是如何描述这个方法的:
[plain] view
plaincopy
length
public int length()返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。
指定者:
接口 CharSequence 中的 length
返回:
此对象表示的字符序列的长度。
[java] view
plaincopy
public static void main(String[] args) throws UnsupportedEncodingException {
String a = "123abc";
System.out.println(a.length());
a = "中文";
System.out.println(a.length());
}
结果为6和2。这个方法判断的是String串的字符长度,但是数据库中却是以字节来判断数据长度的(varchar2)。如果String串为纯英文,那么一个英文字母是一个字符,长度为1,占1个字节,是不会出错的,但是如果String串中包含中文,一个中文汉字也是一个字符,长度为1,但是却占多个字节(具体占几个字节跟使用的编码有关),那么如果数据中包含中文,数据的长度就很有可能会超过数据库中对应字段的长度限制。
解决方式:
既然是判断数据长度时以字符为标准导致出错,那么思路就很明确了,在进行数据长度校验时,取数据的字节长度:
[java] view
plaincopy
public static void main(String[] args) throws UnsupportedEncodingException {
String a = "123abc";
int num = a.getBytes("utf-8").length;
System.out.println(num);
a = "中文";
num = a.getBytes("utf-8").length;
System.out.println(num);
}
结果为6和6,为什么转换成utf-8呢,因为数据库使用的是utf-8编码,既然数据最终是要存到数据库中,那么首先先要保证数据在程序中时、在数据库中时的编码一致(同一个字符在不同的编码格式中所占的字节位数不一致,这点很关键),然后再保证程序和数据库判断数据长度的方式一致,才能避免程序校验通过,入库时却提示数据长度超长的问题。
问题描述:
向数据库中插入一条String类型的数据,在数据库中该字段定义为varchar2(64),一开始使用String.length()来进行数据的长度校验,如果数据是纯英文,那么是没有问题的,但是如果数据中包含中文,校验可以通过,但是在数据入库时经常会报数据超长。
问题分析:
既然问题是数据超长,那么问题应该就是出在数据长度校验上,也就是出在String.length()这个方法上,来看看jdk是如何描述这个方法的:
[plain] view
plaincopy
length
public int length()返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。
指定者:
接口 CharSequence 中的 length
返回:
此对象表示的字符序列的长度。
[java] view
plaincopy
public static void main(String[] args) throws UnsupportedEncodingException {
String a = "123abc";
System.out.println(a.length());
a = "中文";
System.out.println(a.length());
}
结果为6和2。这个方法判断的是String串的字符长度,但是数据库中却是以字节来判断数据长度的(varchar2)。如果String串为纯英文,那么一个英文字母是一个字符,长度为1,占1个字节,是不会出错的,但是如果String串中包含中文,一个中文汉字也是一个字符,长度为1,但是却占多个字节(具体占几个字节跟使用的编码有关),那么如果数据中包含中文,数据的长度就很有可能会超过数据库中对应字段的长度限制。
解决方式:
既然是判断数据长度时以字符为标准导致出错,那么思路就很明确了,在进行数据长度校验时,取数据的字节长度:
[java] view
plaincopy
public static void main(String[] args) throws UnsupportedEncodingException {
String a = "123abc";
int num = a.getBytes("utf-8").length;
System.out.println(num);
a = "中文";
num = a.getBytes("utf-8").length;
System.out.println(num);
}
结果为6和6,为什么转换成utf-8呢,因为数据库使用的是utf-8编码,既然数据最终是要存到数据库中,那么首先先要保证数据在程序中时、在数据库中时的编码一致(同一个字符在不同的编码格式中所占的字节位数不一致,这点很关键),然后再保证程序和数据库判断数据长度的方式一致,才能避免程序校验通过,入库时却提示数据长度超长的问题。
相关文章推荐
- Java String类型数据的字节长度
- Java String类型数据的字节长度
- Java String类型数据的字节长度
- java String类型数据的字节长度
- java中基本数据类型和String类型的字节长度
- java String类型数据的字节长度
- java 数据类型对应的字节长度
- java如何判断一个String类型数据由多少字节组成?
- java基本数据类型占用字节长度
- Java中数据类型对应的字节长度
- java中数据类型转换 Integer String Long Float Double Date Char
- JAVA 基本数据类型长度
- java中的String的数据类型
- Java 8 种数据类型 字节大小,int 4个字节,boolean几个字节
- Object c/swift,java,c/c++在32位和64位各个平台上基本数据类型 所占有的字节数
- Java千百问_06数据结构(007)_String属于基本数据类型吗
- Java中的八种基本数据类型所占字节的求法
- Java中boolean数据类型占用多少个字节
- Java中String数据类型
- 理解Java中的String数据类型