使用JdbcTemplate从数据库中无法正确返回特殊字符

时间:2017-07-27 19:05:48

标签: oracle jdbc character-encoding char spring-jdbc

在数据库中,AptNumber的值=1º,但是当使用select查询时,它返回AptNumber =1ㅊ,因此在selct中º更改为

应用:Spring Batch 使用:JdbcTemplate连接DB 数据BAse:Oracle Querty:从CUST_ADDR WHERE CUST_ADDR_ID = 12345中选择APT_NBR;

1 个答案:

答案 0 :(得分:0)

º是字符U+00BA: MASCULINE ORDINAL INDICATOR

您的数据库字符集为US7ASCII,此集不支持º,因此您无法存储它。

您的数据库设置为US7ASCII,但您的Java使用UTF-16。 Java将0x00 0xBA发送到数据库。我不知道为什么,但当编码为UTF-16时,这会转换为0xFF 0xBA U+FFBA HALFWIDTH HANGUL LETTER CHIEUCH

你可以这样做。

  • 使用NVARCHAR2数据类型而不是VARCHAR2。通常,国家字符集是支持所有Unicode字符的Unicode集。
  • 将数据库迁移到Unicode,请参阅Character Set Migration
  • 我的另一个想法是使用° U+00B0: DEGREE SIGN作为解决方法。但是,ASCII也不支持它。