我有一个带撇号字符的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/

10-11 23:13
查看更多