【问题标题】:Troubleshootings with encoding编码疑难解答
【发布时间】:2011-10-27 16:33:29
【问题描述】:

我正在从事 j2ee 项目。它应该适用于英语和俄语。所以我有一个 EncodingFilter ,它有映射' /* '并且每次都做一件事:request.setCharacterEncoding("UTF-8");

我还安装了 MySQL 5.5,表和数据库的字符集设置为 utf-8,排序规则设置为 utf8_general_ci

在我的本地机器上一切正常,俄语语言正确存储在数据库中。

然后我尝试在 jelastic.com 上测试我的应用程序。在那里我还选择了 MySQL,导入转储,将字符集设置为utf-8,将排序规则设置为utf8_general_ci。当我向 db 添加俄语单词时,我只看到'?????'。但是dump自带的长辈记录就好了!我真的不知道出了什么问题。

【问题讨论】:

  • 您在哪里看到“?????”?通过一些数据库管理工具在数据库中?还是在 HTTP 响应中?
  • 我正在使用 phpMyAdmin。但正如'??????'所说仅标记新记录,来自转储的长者很好。所以我认为 phpMyAdmin 对我的情况没有影响。
  • 这只是一个排除一个和另一个的问题:) 我发布了一个答案。

标签: java mysql servlets jdbc character-encoding


【解决方案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。

【讨论】:

  • 非常感谢!你知道,内化可能是一种真正的痛苦)
  • 这是因为美国人不关心更多的国家;)
猜你喜欢
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多