Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java web框架(Ninja和Spark框架)的MySQL unicode错误_Java_Mysql_Unicode_Encoding_Character Encoding - Fatal编程技术网

java web框架(Ninja和Spark框架)的MySQL unicode错误

java web框架(Ninja和Spark框架)的MySQL unicode错误,java,mysql,unicode,encoding,character-encoding,Java,Mysql,Unicode,Encoding,Character Encoding,我第一次使用Spark框架和ORMLite来处理在网页上以表单形式提交的数据,我在提交汉字时看到了unicode问题。我首先认为问题可能是由于ORMLite,因为我的MySQL数据库的字符集已设置为使用utf8\u general\u ci 因此,我尝试使用Ninja框架使用相同的MySQL数据表提交相同的表单,但是,同样的问题也发生了。中文字符原来是“??”(数据库字段中的一串问号) 在我的玩具程序中,我有一个名为“Book”的模型类,它有三个实例变量: Long id; String aut

我第一次使用Spark框架和ORMLite来处理在网页上以表单形式提交的数据,我在提交汉字时看到了unicode问题。我首先认为问题可能是由于ORMLite,因为我的MySQL数据库的字符集已设置为使用
utf8\u general\u ci

因此,我尝试使用Ninja框架使用相同的MySQL数据表提交相同的表单,但是,同样的问题也发生了。中文字符原来是“??”(数据库字段中的一串问号)

在我的玩具程序中,我有一个名为“Book”的模型类,它有三个实例变量:

Long id;
String author;
String title;
因此,html表单只有两个输入字段:author和title

我在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
    

    根本不清楚你在哪里看到问号。这很可能只是您用来查看数据库的MySQL工具的问题,或者是您如何获取数据的问题。使用Java,您能否再次获取正确的数据?查看您获取的字符串中每个字符的Unicode值。我使用phpmyadmin作为UI来查看存储在数据库中的数据。我还有一个java方法从数据库中读取数据,它在网页上显示一个列表。java输出的书籍列表也显示了一系列问号。好的,接下来您需要检查数据的确切位置。请参阅和(第一个链接是关于C#,但同样的原则也适用于Java)谢谢,我将查看它。