2011-08-16 190 views
1

我正在开发j2ee项目。它应该工作宽度英语和俄语。所以我有一个具有映射的EncodingFilter/*每一次做好一两件事:request.setCharacterEncoding("UTF-8");编码故障排除

我也有MySQL的安装5.5,表和数据库的字符集设置为utf-8,并整理到utf8_general_ci

在我的本地机器一切正常就好,俄罗斯郎妥善保存在数据库中。

然后我试图在jelastic.com上测试我的应用程序。在那里我还选择了MySQL,导入转储,将字符集设置为utf-8,并将排序规则设置为utf8_general_ci。当我给db添加俄语单词时,我只看到'?????'。但随着转储附带的老年记录很好!我完全不知道什么是错的。

+0

你到底在哪里看到“?????”?在数据库中由一些数据库管理工具?或者在HTTP响应中? – BalusC

+0

我正在使用phpMyAdmin。但正如'??????'所说的那样只标记新的记录,从转储的老人都很好。所以我认为phpMyAdmin对我的情况没有影响。 – Dmitry

+0

这只是一个问题,排除一个和其他:)我发布了一个答案。 – BalusC

回答

1

你需要告诉MySQL JDBC驱动程序使用UTF-8作为客户端的编码,而不是平台默认的一个。如果平台默认字符集不是UTF-8,那么只要字符未被JDBC驱动程序正在使用的平台默认字符集覆盖,就会导致?被存储在数据库中。

你可以做到这一点通过增加useUnicode=yescharacterEncoding=UTF-8参数的JDBC URL。例如。

 
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8 

它可以作用于当地的Java开发环境可能是因为你已经配置了环境的平台默认字符集是UTF-8。

+1

非常感谢!你知道,内在化可能是一个真正的痛苦) – Dmitry

+0

这是因为美国人不关心更多的国家;) – smas