记一次 Hibernate 插入数据中文乱码报错解决

错误描述

程序运行,向表中插入数据(包含中文)报错:\xE6\xB2\x88\xE9\x9B\xAA...

但是自己另外新建一个数据库手动插入数据中文正常,同样修改数据库,表的编码之后同样不行。而且 MySQL5.7下也会出现这种情况无法解决。

问题解决

  在 Hibernate 主配置文件中,我们会配置数据库方言,一般配置如下:

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

  查看其对应源码可以查看到有个方法,如下:

@Override
public String getTableTypeString()
{
  return "ENGINE=InnoDB";
}

  所以我们可以自定义一个类,重写上面方法,如下:

package com.taohan.util;

import org.hibernate.dialect.MySQL5InnoDBDialect;

public class HibernateEncodeAdapter MySQL5InnoDBDialect {

    @Override
    public String getTableTypeString() {
        return "ENGINE=InnoDB DEFAULT CHARSET=utf8";
    }
}

  最后修改 Hibernate 主配置文件,指定数据库方言类为我们自定义的那个,如下:

<property name="dialect">com.taoahn.util.HibernateEncodeAdapter</property>

  当然,最好是同时在 Hibernate 主配置文件的设置数据库连接路径后加上 ?useUnicode=true&characterEncoding=UTF-8,如下:

<property name="hibernate.connection.url">jdbc:mysql:///test?useUnicode=true&characterEncoding=UTF-8</property>

  

参考地址:https://blog.csdn.net/fukua2017/article/details/78878443

原文地址:https://www.cnblogs.com/dream-saddle/p/9771740.html

时间: 2024-11-08 15:39:47

记一次 Hibernate 插入数据中文乱码报错解决的相关文章

Linux下Tomcat向MySQL插入数据中文乱码解决办法

Linux下Tomcat向MySQL插入数据中文乱码解决办法 一.问题 在windows上面使用eclipse开发的项目在windows上面运行一切正常,部署到腾讯云时出现向MySQL数据库中插入数据是中文乱码 二.解决办法 1.尝试一直接在linux上面使用insert语句插入中文,正常2.尝试二在tomcat配置文件server.xml中加入useBodyEncodingForURI="true",不行3.尝试三在tomcat配置文件server.xml中再加入URIEncodin

C# mysql 插入数据,中文乱码的解决方法

用C#操作mysql时, 插入数据中文都是乱码,只显示问号,数据库本身使用的是utf-8字符 有两种解决办法: 一种是在执行语句前面设置,如: 1 MySQLCommand mCommand = new MySQLCommand("set names gb2312", m_Connection); 另一种是直接加在连接字符串里,如: 1 <add name="connection" connectionString="server=127.0.0.1

PLSQL插入数据中文乱码的问题

最近刚买了一个笔记本重新安装了oracle,使用了PLSQL,安装好了试用了一下,再插入中文的sql值时出现了乱码. 中文乱码就是编码不统一所导致的了,解决办法只需要把编码统一下即可解决了. 此种情况最大的可能就是客户端和服务器端的编码不一致,解决方法如下: 1. 查看服务器端编码 select userenv('language') from dual; 我实际查到的结果为:AMERICAN_AMERICA.AL32UTF8 2. 执行语句 select * from V$NLS_PARAME

Python 中文注释报错解决方法

代码中一旦有了中文注释便会报错. 原因 如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明. 解决方法 在第一行或是第二行加入这么一句# -- coding: utf-8 -- 完美解决

sass注释中有中文出现报错解决方法

在使用koala编译sass成css过程中出现这样的报错 后来查资料说是自己在sass中的注释中有中文引起的, 解决方案: 进入C:\Ruby25-x64\lib\ruby\gems\2.5.0\gems\sass-3.7.3\lib\sass这个地址,每个人安装的位置和sass版本不同可能位置有些许不同,自行调整,在这个地址下找到engine.rb这个文件 打开这个文件,添加 # 让Sass支持中文注释 Encoding.default_external = Encoding.find('ut

mysql利用sql脚本插入数据中文乱码

将其中的 /*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;/*!40101 SET @[email protected]@COLLATION_CONNECTION */;/*!40101 SET NAMES gbk */;和末尾的 /*!40101 SET @[email protected]@CHARACTER_SET

mysql5.6插入中文字段报错解决

使用环境:1.centos6.72.mysql5.63.虚拟机VMware? Workstation 12 Pro (12.5.9 build-7535481)4.SecureCRT Version 6.2.0 (build 195) 问题症状: 检查步骤:1.在mysql里输入命令,show create table tanzhou;(根据自己表名称填写,这里是tanzhou)当前编码错误,图片显示CHARSET=latin1,应为UTF-8.2.在mysql查看编码,show variabl

mysql导入数据方法和报错解决

mysql -u root -p databasename < db.sql 数据库导入数据时,MySQL收到下面异常:ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes. 这是因为没有调整mysql的默认配置,默认最大只能处理16M的文件,而我要导入的伪造数据有50M的一个SQL. 于是调整配置文件: /etc/my.cnf 修改mysql的最大允许包大小 在[mysqld]部分(不在这部分没用)添加一

form提交数据中文乱码问题总结

一:form在前台以post方式提交数据: 浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据.数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是