欧元字符€代码页问题

时间:2018-03-21 17:50:04

标签: java spring hibernate jsp db2

我们最近在我们的应用程序中升级了Java(7到8),Spring(3到4),Hibernate(3到4)。之后我们面临着像(öüä)等特殊字符的问题。这些值被数据库中的一些垃圾字符取代。

当我查看jsp页面时,我发现代码页是“iso-8859-1”,所以我改为“UTF-8”。现在特殊字符工作正常,但我们又面临欧元问题(€ )符号。

当我在谷歌搜索时,我发现它可能与数据库代码页问题有关。我检查了数据库(DB2)代码页,它是“iso-8859-1。但是无法更改数据库中的代码页。

在生产环境中,包括欧元符号在内的所有特殊字符都可以正常使用“iso-8859-1”代码页。我仍然无法理解它是如何工作的。

升级Java(7到8),Spring(3到4),Hibernate(3到4)真正创建了代码页问题。我现在如何解决欧元问题。

任何人都可以提供一些建议。

更新:数据库(DB2)正在Linux服务器上运行。在升级Java(7到8),Spring(3到4),Hibernate(3到4)之前,所有特殊字符在所有环境(UAT和DEV)中都与“iso-8859-1”代码页一起正常工作。在生产数据库中,如果我在jsp页面中使用€符号,它将被替换为问号(?)符号。但是在UAT中DB被箭头类符号()替换。

我执行了mao给出的查询,我在Prod和UAT环境中获得了相同的结果。

Code page details

1 个答案:

答案 0 :(得分:0)

当您使用Db2-LUW V10.5时,代码页819,Db2正在为您当前的配置正常工作。

Mark Rotteveel在评论中指出的原因是ISO-8859-1不包括欧元符号。执行插入/更新时,如果应用程序代码页与数据库代码页不同,则Db2将执行代码页转换,并且该转换将用问号替换未知字符(不在数据库代码页中的字符)。

另请参阅Db2知识中心的此page,特别是“接下来该做什么”部分'代码页819。

您可能希望计划迁移到ISO-8859-15代码页923(这意味着重新创建数据库)并迁移数据,这很简单但涉及中断。另一种选择是使用UTF-8编码重新创建数据库(这涉及更多测试)。这两种方法都不会修复表中已经不正确的数据,但任何新插入或更新的数据都可以正常,前提是确保应用程序代码页与数据库代码页匹配