您的位置:首页 > 编程语言 > Java开发

解决JAVA字符串长度与数据库字符串长度不一致问题

2015-05-31 15:29 896 查看
我先说下场景,数据库定义的长度是VARCHAR2(100),文件数据有一个字段有40个字符,UTF-8编码的非英文字符,如果在插入数据库的时候如果使用String的length()方法去获取长度大小肯定是40.这里40长度肯定是小于数据库大小100,通过了验证,但是插入数据库会出现,值过大。

这里是我说下俩个解决办法:

1.将VARCHAR2(100),字节100,改VARCHAR(CHAR 100) 字符100.

2,在JAVA判断长度的时候,修改获取长度的方法,得到字符串的实际占用字节空间长度。

第一种方法增加了表的实际占用长度,本人不喜欢这么做,因为最初的业务规定长度,但是文件没有按规定来提供,可以认定为错误数据,单独放到错误表中进行记录。

如果表所有的字段都设计成VARCHAR(CHAR),表的占用空间增加。

第二种方法,主要是如何得到字符串的实际占用字符空间长度,GBK和GB2312字符集,每个中文都是占用2个字节,UTF-8字符集,每个中文都是3个字节。英文在以上编码下都是单字节。JAVA中String的length方法是按字符获取的,并非字节。

看下具体的代码:

/**

* 根据字符编码得到字符串实际占用长度

*/

public static int getStringLength(String str,String encoding) throws UnsupportedEncodingException{

if(isNullOrEmpty(str))

return 0;

else

return str.getBytes(encoding).length;

}

/**

* 判断字段是否为空

* @return true 为空, false 不为空

*/

public static boolean isNullOrEmpty(String str){

return null == str || "".equals(str);

}

测试代码:

public static void main(String[] args) throws UnsupportedEncodingException {

String str = "中国111";

System.out.println("utf-8:" +getStringLength(str,"utf-8"));

System.out.println("gbk:"+getStringLength(str,"gbk"));

System.out.println("utf-16:"+getStringLength(str,"utf-16"));

System.out.println("ISO-8859-1:"+getStringLength(str,"ISO-8859-1"));

}

输出:

utf-8:9

gbk:7

utf-16:12

ISO-8859-1:5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: