Java 如何使用hibernate将汉字写入mysql?

Java 如何使用hibernate将汉字写入mysql?,java,mysql,database,hibernate,encoding,Java,Mysql,Database,Hibernate,Encoding,我正在用javascript制作一个web应用程序。Im使用JavaServlet,通过hibernate连接mysql数据库。在Servlet中有一个中文字符串,当我尝试将该字符串写入mysql字段时,它在mysql中显示为“?”。我在netbeans中的整个项目都设置为charset=UTF-8。我试图将数据库中的排序规则和字符集设置为utf-8、utf8mb4、big5,但它们都不起作用。我还尝试将我的列从varchar更改为nvarchar,但当我单击apply(mysql工作台)时,该

我正在用javascript制作一个web应用程序。Im使用JavaServlet,通过hibernate连接mysql数据库。在Servlet中有一个中文字符串,当我尝试将该字符串写入mysql字段时,它在mysql中显示为“?”。我在netbeans中的整个项目都设置为charset=UTF-8。我试图将数据库中的排序规则和字符集设置为utf-8、utf8mb4、big5,但它们都不起作用。我还尝试将我的列从varchar更改为nvarchar,但当我单击apply(mysql工作台)时,该列仍然是“varchar”

这是我的servlet

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("application/json");
        String tabla=request.getParameter("tabla");
        //String tabla contains chinese caracters
        String user=request.getParameter("user");
        Configuration myConf = new Configuration();
        myConf.configure("hib/hibernate.cfg.xml");
        StandardServiceRegistry service = new StandardServiceRegistryBuilder().
                applySettings(myConf.getProperties()).build();
        SessionFactory myFactory = myConf.buildSessionFactory(service);
        Session conn = myFactory.openSession();
        Transaction t = conn.beginTransaction();

        List<User>upislista;
        upislista=conn.createQuery("SELECT u FROM User u WHERE useUsername='"+user+"'").list();
        upislista.get(0).setUseKineski(tabla);





        t.commit();
        conn.close();
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“应用程序/json”);
字符串tabla=request.getParameter(“tabla”);
//字符串tabla包含汉字
字符串user=request.getParameter(“用户”);
配置myConf=新配置();
配置(“hib/hibernate.cfg.xml”);
StandardServiceRegistry服务=新的StandardServiceRegistryBuilder()。
applySettings(myConf.getProperties()).build();
SessionFactory myFactory=myConf.buildSessionFactory(服务);
会话conn=myFactory.openSession();
事务t=conn.beginTransaction();
Listupilista;
upislista=conn.createQuery(“从用户u中选择u,其中useUsername=”“+User+””)。列表();
upislista.get(0.setUseKineski(tabla);
t、 提交();
康涅狄格州关闭();

不知道你用的哪个版本的mysql,但是你需要配置mysql

character_set_server=utf8mb4
一些版本冬眠能够正确配置,但是一些版本需要你手动配置。

Hibernate XML:

<property name="hibernate.connection.CharSet">utf8mb4</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>
上述更改足以让我从utf8升级到utf8mb4字符集方案

作为旁注,我想澄清一下,UTF-8是字符编码,而utf8mb4是MySQL支持的字符集。MySQL的utf8mb4是MySQL的utf8的超集

Spring/Hibernate筛选器:

<form accept-charset="UTF-8">

netbeans和浏览器可以识别汉字,只有mysql将其显示为“?”。您是否尝试过将字体更改为更为utf8友好的字体?我会尝试在
Resultset网格:
中使用
GNU Unifont
。我现在尝试了,但仍然不起作用。当我尝试将列从varchar更改为nvarchar时,以及在相同的tame set列排序规则“utf-8 default”中它显示错误。错误1064:您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第2行SQL语句“CHARACTER SET”utf8“NULL DEFAULT NULL”附近使用的正确语法:ALTER TABLE
kineski
kineski
更改列
kinu-tekst
kinu-tekst
NVARCHAR(4000)字符集“utf8”NULL默认值NULL更改后是否重新启动mysql workbench?在何处键入“CHARACTER\u SET\u server=utf8mb4”我很抱歉,如果这是一个愚蠢的问题,但我是mysql和hibernate的初学者。你能用英语写吗,因为我看不懂中文。对不起,我以为你能读中文。里克·詹姆斯的答案很有效。如果你想获得更多信息,你可以阅读官方文件:注意,版本是正确的,我会的,t脚踝。
<form accept-charset="UTF-8">
<property name="url" value="jdbc:mysql://localhost:3306/miniprojetjee?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8&characterEncoding=utf-8"/> (or maybe it is =yes)
@RequestMapping(value = "/getRegion2", produces={"application/json; charset=UTF-8"},method = RequestMethod.GET)