判断前台输入项的长度应该都会碰到String.length() 判断出来没有超出最大长度,存到数据库就超出长度的问题,oracle字符集是gbk的不太清楚,如果是UTF-8,中文是占三个字符的,所以要对中文进行特别判断。
代码如下:
public static int lengthOfUTF8(String value) { int valueLength = 0; if(value==null) { return valueLength; } String chinese = "[u0391-uFFE5]"; /* 获取字段值的长度,如果含中文字符,则每个中文字符长度为3,否则为1 */ for (int i = 0; i < value.length(); i++) { /* 获取一个字符 */ String temp = value.substring(i, i + 1); /* 判断是否为中文字符 */ if (temp.matches(chinese)) { /* 中文字符长度为3 */ valueLength += 3; } else { /* 其他字符长度为1 */ valueLength += 1; } } return valueLength; } public static void main(String[] args) { String str="abc中文d二"; System.out.println("常规length:"+str.length()); System.out.println("占用数据库空间:"+StringUtil.lengthOfUTF8(str)); }
另外,在做测试的时候意外发现,如果在一个数据类型为 varchar2(4000)的字段里插入4000个中文字(for update),会被截断,并且使用 length() 获取长度时,获得的结果 是1333,和我以前想的不一样,所以在sql中使用length() 判断是否还可以存储更多字符也是不准确的,可能有其他函数吧,以后再查。