如何用hibernate将汉字写入mysql?

8fq7wneg  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(531)

我正在用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();
x8diyxa7

x8diyxa71#

休眠xml:

<property name="hibernate.connection.CharSet">utf8mb4</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>

连接url:

db.url=jdbc:mysql://localhost:3306/db_nameuseUnicode=true&character_set_server=utf8mb4

上面的更改足以让我从utf8升级到utf8mb4字符集方案。
作为旁注,我想澄清一下,utf-8是字符编码,而utf8mb4是mysql支持的字符集。mysql的utf8mb4是mysql的utf8的超集。
spring/hibernate筛选器:

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

Spring /冬眠:

<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)

“Spring”:

@RequestMapping(value = "/getRegion2", produces={"application/json; charset=UTF-8"},method = RequestMethod.GET)
m0rkklqb

m0rkklqb2#

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

character_set_server=utf8mb4

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

相关问题