【发布时间】:2014-06-01 18:16:03
【问题描述】:
我第一次使用Spark框架和ORMLite处理网页表单提交的数据,看到提交汉字时出现unicode问题。我一开始以为问题可能出在ORMLite,因为我的MySQL数据库的charset已经设置为使用utf8_general_ci。
所以我尝试使用 Ninja 框架使用相同的 MySQL 数据表提交相同的表单,但是,同样的问题发生了。汉字竟然是“??????” (数据库字段中的一串问号)。
在我的玩具程序中,我有一个名为“Book”的模型类,它有三个实例变量:
Long id;
String author;
String title;
因此,html表单只有两个输入字段:作者和标题。
我在我的 BookDAO 类中编写了以下方法,并使用 Hibernate 将数据持久化到 MySQL 中:
@Transactional
public boolean postBook(String author, String title)
{
EntityManager entityManager = entityManagerProvider.get();
Book book = new Book(author, title);
entityManager.persist(book);
return true;
}
我尝试将mysql的字符集更改为gbk(汉字编码),但仍然没有成功。我注意到的另一件事是编码错误只发生在我的 Ubuntu 服务器上,而不发生在我的 Mac 服务器上。这让我想到这两个操作系统的差异导致了我对 MySQL 的问题。
【问题讨论】:
-
根本不清楚您在哪里看到问号。这很可能只是您用来查看数据库的 MySQL 工具,或者您如何获取数据的问题。使用 Java,您可以再次获取正确的数据吗?查看您获取的字符串中每个字符的 Unicode 值。
-
我使用 phpmyadmin 作为我的 UI 来查看存储在数据库中的数据。我还有一个从数据库中读取数据的 java 方法,它在网页上显示一个列表。 java输出的书籍列表也显示一串问号。
-
好的,接下来您需要检查确切数据在哪里被弄乱了。请参阅csharpindepth.com/Articles/General/DebuggingUnicode.aspx 和msmvps.com/blogs/jon_skeet/archive/2014/01/20/…(第一个链接是关于 C#,但同样的原则也适用于 Java)
-
谢谢,去看看。
标签: java mysql unicode encoding character-encoding