我首先使用Spark框架和ORMLite处理网页上表单提交的数据,在提交中文字符时看到了unicode问题。我首先想到问题可能是由于ORMLite,因为我的MySQL数据库的字符集已设置为使用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
登录mysql终端:
>mysql -uroot -p mysql>use mydb; mysql>alter database mydb character set utf8;
或者执行以下操作来永久更改 MySQL 的字符集:
- 编辑 my.cnf:
> sudo vim/etc/mysql/my.cnf
将以下条目添加到 my.cnf
[client]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
关于java - Java Web 框架(Ninja 和 Spark 框架)出现 MySQL unicode 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982939/