【问题标题】:MySQL unicode error with java web frameworks (Ninja, and Spark framework)java web 框架(Ninja 和 Spark 框架)的 MySQL unicode 错误
【发布时间】: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.aspxmsmvps.com/blogs/jon_skeet/archive/2014/01/20/…(第一个链接是关于 C#,但同样的原则也适用于 Java)
  • 谢谢,去看看。

标签: java mysql unicode encoding character-encoding


【解决方案1】:

通过执行以下任一操作解决了我的编码问题。两种方法都需要重启mysql

  1. 登录mysql终端:

    >mysql -uroot -p
    mysql>use mydb;
    mysql>alter database mydb  character set utf8;
    

或执行以下操作以永久更改 MySQL 的字符集:

  1. 编辑 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

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 2014-07-07
    • 2019-12-19
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2012-07-18
    • 2015-06-01
    相关资源
    最近更新 更多