问题描述:最近我在写一个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. Java获得键盘输入的两种方法

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  2. ubuntu1404安装搜狗输入法后出现黑框的问题

    1.安装xcompmgr   sudo apt-get install xcompmgr 2.设置xcompmgr自动启动 mkdir-/.config/autostart vim xcompmgr. ...

  3. c#多线程介绍(上)

    转载原文:这里是链接内容 转载原文:这里写链接内容 转载原文:这里写链接内容 (重要事情说三遍) 引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个 ...

  4. ABP框架理论学习之Debugging

    返回总目录 所有的官方ABP nuget包都是支持GitLink的,这意味着你可以在项目中轻松地调试所有的以Abp为前缀的Nuget包. 要开启这项支持,"启用源服务器支持"选项应 ...

  5. AutoMapper使用手册(一)

    阅读目录 1. 介绍 2. 基本使用 3. 自动分割映射(Flattening) 4. 自定义字段映射(Projection) 5. 验证配置(Configuration validation) 介绍 ...

  6. 60分钟Python快速学习(给发哥一个交代)

    60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空 ...

  7. EF:oracle的number类型映射为C#的boolean类型

    一开始用下面的方法映射, Property(p => p.IsFixed).HasColumnName("IS_FIXED").HasColumnType("num ...

  8. C语言 · 未名湖边的烦恼

    问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个.现在 ...

  9. 使用变量 数据类型转换 逻辑控制语句(begin ...end; case...end; if...else; while)

    一:变量 变量分为局部变量和全局变量  (全局变量是系统自定的,是不可手动给值的,若想自己定义全局变量可考虑创建全局临时表!) 局部变量的定义:  declare @变量名  数据类型 (局部变量只能 ...

  10. Hadoop学习笔记——搭建

    一搭建环境列表 操作系统:centos6.5 64位 JDK环境:jdk1.7.0_71 hadoop版本:社区版本2.7.2,hadoop-2.7.2-src.tar.gz 主机名 ip 角色 用户 ...