我有一个带撇号字符‘
的java字符串(与'
不同)。
我包含该字符的字符串的长度为35,可以使用.length
方法进行验证。
但是,当使用‘
方法setString
将包含pstmt.setString(1, description);
的字符串传递给PreparedStatement对象时,字符串的长度将转换为37个字符串,这可以从以下错误消息中看到:
java.sql.BatchUpdateException:ORA-12899:值太大
用于“说明”列(实际:37,最多:35)
解决这个问题的最优雅方法是什么?
最佳答案
如果要在将String插入数据库之前检查String的长度,则必须将其转换为DB使用的字符集。可以做到
new String(string, charset);
例如
System.out.println("‘".length());
// displays 1
System.out.println(new String("‘".getBytes(), "UTF-16").length());
// displays 2
System.out.println(new String("‘".getBytes(), "ISO-8859-1").length());
// displays 3
参见http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#String%28byte[],%20java.lang.String%29
关于java - 包含撇号字符U + 2019的字符串在传递给PreparedStatement对象时会转换为更多字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13864318/