包含Apostrophe Character U + 2019的字符串在传递给PreparedStatement对象时会转换为更多字符

时间:2012-12-13 16:34:57

标签: java jdbc

我有一个带有撇号字符的java字符串(与'不同)。 包含该字符的字符串长度为35,可以使用.length方法进行验证。

但是,使用方法setString将包含pstmt.setString(1, description);的字符串传递给PreparedStatement对象时,字符串的长度将转换为37个字符的字符串,可以看到从我得到以下错误消息:

java.sql.BatchUpdateException: ORA-12899: value too large 
for column "DESCRIPTION" (actual: 37, maximum: 35)

处理这个问题最优雅的方法是什么?

1 个答案:

答案 0 :(得分:2)

如果要在将数据库插入数据库之前检查字符串的长度,则必须将其转换为数据库使用的字符集。可以用

完成
 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