问题描述:最近我在写一个j2ee的留言板系统模块,遇到了一个非常让我头大的问题,当我从JSP页面输入数据后,通过hibernate中的业务逻辑类HQL语句把这个数据插入到本地的mysql数据库中,可是当我发现成功插入后在数据库中看到的是乱码,再回显到浏览页面中看到的也是一堆乱码,我的jsp页面设置编码为UTF-8,如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

然后我查看我本地的数据库编码方式也为UTF-8,如下:

  操作 行数 类型 排序规则 大小 多余
tb_manager  浏览  结构  搜索  插入  清空  删除 2 InnoDB utf8_general_ci 16 KB -
tb_reply  浏览  结构  搜索  插入  清空  删除 5 InnoDB utf8_general_ci 16 KB -
tb_topic  浏览  结构  搜索  插入  清空  删除 19 InnoDB utf8_general_ci 16 KB  

可是问题还是没有解决,我各种百度都没能解决,我就想,数据是在插入的数据库前就已经乱码还是插入到数据库后才乱码的呢?

于是我就在插入数据库前把要插入的数据打印到控制台,果然是一堆乱码。网上说一般页面的编码是ISO-8859-1我就写了一个方法把获取到数据先转换为UTF-8在插入到数据库中

方法的代码如下:

public String toChinese(String strvalue){
        try {
            if (strvalue==null||strvalue.equals("")) {
                return "";
            } else {
            strvalue = new String(strvalue.getBytes("ISO8859_1"), "UTF-8");
            return strvalue;
            }
        } catch (Exception e) {
            return "";
        }
        
    }

写完后再次插入数据后把转换后的数据打印到控制台,发现乱码已经成功转换为中文了,可是问题又来了,数据库中的数还是乱码,这时我就明白了(数据在插入前插入后都会经过编码转换),好坑爹啊(*^__^*) ,jsp页面上输入的数据会把数据转换为ISO8859-1,插入到数据库的过程还会把这个数据转换为另一种编码,中间会经过多少次编码的转换我真搞不懂O(∩_∩)O~我在数据库中写了这个 sql语句

show variables like 'char%';结果为

Variable_name Value  
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database latin1
character_set_filesystem binary
character_set_results utf8mb4
character_set_server latin1
character_set_system utf8
character_sets_dir C:\xampp\mysql\share\charsets\

一看才知道数据库不是UTF-8的啊,我去O(∩_∩)O~,这个显示我的数据库设置的编码是Latin1,我真是醉了Latin1就是ISO-88859-1的别名啊,前面白转了,。后来在我的hibernate配置文件中加了这个东西,把数据库连接设置为UTF-8就把问题解决了

<!-- 数据库连接的URL -->
        <property name="connection.url">jdbc:mysql://localhost:3306/db_board?useUnicode=true&amp;characterEncoding=utf-8 </property>
       上面的斜线部分

再次用show variables like 'char%';查询我的数据库编码,结果如下:

Variable_name Value  
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8
character_set_filesystem binary
character_set_results utf8mb4
character_set_server latin1
character_set_system utf8
character_sets_dir C:\xampp\mysql\share\charsets\

最后再次测试,插入到数据库中的数数据终于完美显示为中文了,真是~~o(>_<)o ~~泪奔,这个问题搞了我两天,早上睡不着5点多醒来就搞,也是佩服我自己,最后美美的睡了一觉,O(∩_∩)O哈哈~

总结:其实回过头来看,我一开始就错误的以为自己的数据库是UTF-8,把排序规则错误的以为就是UTF-8,其实用show variables like 'char%';才能知道你的数据库编码方式是啥,其实我上面的写的方法就是把JSP页面的获取到的数据编码从UTF-8转换为ISO-8859-1,之后再插入到数据库中,会乱码只是数据库没有设置为UTF-8而已,把hibernate配置文件的数据库连接后面加上?useUnicode=true&amp;characterEncoding=utf-8这句话就好了,这样就把数据库编码设置为UTF-8了

关于从JSP页面插入数据到数据库中乱码问题的解决的更多相关文章

  1. (转)MySQL 插入数据时,中文乱码问题的解决

    MySQL 插入数据时,中文乱码问题的解决  原文:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当向 MySQL 数据库插 ...

  2. java批量插入数据进数据库中

    方式1: for循环,每一次进行一次插入数据. 方式2: jdbc的preparedStatement的batch操作 PreparedStatement.addBatch(); ...... Pre ...

  3. 用python批量插入数据到数据库中

    既然使用python操作数据库必不可少的得使用pymysql模块 可使用两种方式进行下载安装: 1.使用pip方式下载安装 pip install pymysql 2.IDE方式 安装完成后就可以正常 ...

  4. MySQL 插入数据时,中文乱码问题的解决(转)

    当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12',' ...

  5. Mysql插入数据的时候,中文乱码问题的解决

    如果在Mysql中插入数据的时候,没有特定指定编码,可能会产生一系列的问题,例如,如果用insert语句的时候,可能提示incorrect values,等...究其原因,实际上无非是要让数据库和表中 ...

  6. ssm中从页面到controller和数据库出现乱码问题的解决

    1.确保项目编码为utf8,点击项目右键,点击properties 2.确保数据库编码为utf8,以MySQL为例,可到mysql目录下,my.ini文件中修改后,重启mysql服务 重启mysql服 ...

  7. MySQL 插入数据时,中文乱码问题的解决

    当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12',' ...

  8. jsp页面之间传中文参数显示乱码问题的解决

    最近在项目中遇到jsp页面通过url传递参数,出现乱码,但是在本地是正常显示,在服务器上却是乱码,找了好久都没找到解决方法,最终在大神的帮助下解决了这个问题 比如从a.jsp像b.jsp页面传递参数 ...

  9. [ios]利用alertView 插入数据都数据库。笔记

    利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...

随机推荐

  1. 简单正则匹配QQ邮箱

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <script src ...

  2. HTML Help WorkShop 创作、调用方法和技巧

    一.在CHM 文件中所用到的弹出式菜单: 二.在HTML Help WorkShop 中不用显示的样式   (1).从右到右阅读顺序. (2).对话框 (3).滚动条在左边 (4).仅展开单个标题   ...

  3. 如何解决Maple的应用在数学中

    对任意数学和技术学科的研究员.教师和学生而言,Maple是一个必备的工具.通过Maple,教师将复杂数学问题注入生命,学生的精力集中在概念理解上而不是如何使用工具上,研究员可以开发更复杂的算法或模型. ...

  4. Form表单中的get和post的区别

    method="get/post",两种方式的区别 Form中的get和post方法,在数据传输过程中分别对应了GET和POST方法.二者主要区别如下: 1.Get将表单中数据的按 ...

  5. Default Parameter Values in Python

    Python’s handling of default parameter values is one of a few things that tends to trip up most new ...

  6. dagger2 备注

    dagger 2是android下的IOC框架,类似java服务端的spring,但功能上远没有其强大.个人理解不管是APP还是服务端依赖注入的本质都是一样的,用于解耦某个服务的定义和实现.我自己给出 ...

  7. 解决微信公众号OAuth出现40029(invalid code,不合法的oauth_code)的错误

    关于OAuth 官方教程:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&la ...

  8. Ubuntu 14 安装 .Net Core

    .Net Core的安装包的分发地址如下: https://apt-mo.trafficmanager.net/repos/dotnet-release/pool/main/d/ 方法一: 可以分别手 ...

  9. MVC与WebForm的区别

    在初步了解MVC后,发现很多人对于MVC和三层架构开发概念上会有很大的混淆,所以把这两天的学习笔记整理一下,分享给自己的同学们.同时也做一个小Demo,让没有接触过MVC开发的同学,能对MVC有一个简 ...

  10. Struts2-修改数据

    <body> 用户信息:<br><br> <% List<User> lu = (List<User>)request.getAttr ...