问题描述:最近我在写一个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. wamp环境 安装memcache 扩展

    这两天在研究tp的memcached缓存 总是遇到坑 在网上找了很多教程看终于弄出来了现在拿出来分享 首先安装memcached下载memcache压缩包 使用cmd以管理员命令去安装 E:\wamp ...

  2. C++类型转换函数

    1.什么是类型转换函数 类型转换函数的作用是将一个类的对象转换成另一类型的数据. class testclass { private: int r; int m; public : testclass ...

  3. "SQL Server does not handle comparison of NText, Text, Xml, or Image data types."

    "SQL Server does not handle comparison of NText, Text, Xml, or Image data types." sql2000 ...

  4. HTML input小结

    一.Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍. 1.type=text 输入类型是text,这是我们 ...

  5. 解读ASP.NET 5 & MVC6系列(3):项目发布与部署

    本章我们将讲解ASP.NET5项目发布部署相关的内容,示例项目以我们前一章创建的BookStore项目为例. 发布前的设置 由于新版ASP.NET5支持多版本DNX运行环境的发布和部署,所以在部署之前 ...

  6. .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长

    一个 asp.net core 站点,之前运行在Linux 服务器上,运行一段时间后有时站点会挂掉,在日志中记录很多“EMFILE too many open files”的错误: Microsoft ...

  7. SQL Server 权限管理

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/权限控制/管理/分配/登入名/数据库用户/角色 概述 对数据库系统而言,保证数据的安全性永远都是最重要的问题之一.一个好的数据库环 ...

  8. Leetcode 刷题计划

    Two Sum    21.4%    Medium Given an array of integers, return indices of the two numbers such that t ...

  9. Understanding RabbitMQ Exchange & Queue

    Exchanges are the only places where messages could be published to; while queues are the only places ...

  10. Atitit图像处理的用途

    Atitit图像处理的用途 1.1. 分类识别 (人脸检测,肤色识别,人类检测:1 1.2. 炫丽的动态按钮生成:色相旋转+自己的草书等图片合成,图片自动裁剪1 1.3. 集成调用自绘gui接口:识别 ...