假设我有以下字符串:Rückruf ins Ausland 我需要将它插入到最大大小为 10 的数据库中。 我在 java 中做了一个普通的子字符串,它提取了这个字符串 Rückruf in 这是 10 个字符。当它尝试插入此列时,出现以下 oracle 错误:
java.sql.SQLException: ORA-12899: value too large for column "WAEL"."TESTTBL"."DESC" (actual: 11, maximum: 10) The reason for this is that the database has a AL32UTF8 character set thus the ü will take 2 chars.
我需要在 java 中编写一个函数来执行此子字符串,但考虑到 ü 占用 2 个字节,因此在这种情况下返回的子字符串应该是 Rückruf i(9 个字符)。有什么建议吗?
最佳答案
如果你想在 Java 中修剪数据,你必须编写一个函数来使用使用的 db 字符集修剪字符串,就像这个测试用例:
package test;
import java.io.UnsupportedEncodingException;
public class TrimField {
public static void main(String[] args) {
//UTF-8 is the db charset
System.out.println(trim("Rückruf ins Ausland",10,"UTF-8"));
System.out.println(trim("Rüückruf ins Ausland",10,"UTF-8"));
}
public static String trim(String value, int numBytes, String charset) {
do {
byte[] valueInBytes = null;
try {
valueInBytes = value.getBytes(charset);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage(), e);
}
if (valueInBytes.length > numBytes) {
value = value.substring(0, value.length() - 1);
} else {
return value;
}
} while (value.length() > 0);
return "";
}
}
关于java - 如何在java中为UTF8字符串做子串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455706/