关于从JSP页面插入数据到数据库中乱码问题的解决
问题描述:最近我在写一个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&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&characterEncoding=utf-8这句话就好了,这样就把数据库编码设置为UTF-8了
关于从JSP页面插入数据到数据库中乱码问题的解决的更多相关文章
- (转)MySQL 插入数据时,中文乱码问题的解决
MySQL 插入数据时,中文乱码问题的解决 原文:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当向 MySQL 数据库插 ...
- java批量插入数据进数据库中
方式1: for循环,每一次进行一次插入数据. 方式2: jdbc的preparedStatement的batch操作 PreparedStatement.addBatch(); ...... Pre ...
- 用python批量插入数据到数据库中
既然使用python操作数据库必不可少的得使用pymysql模块 可使用两种方式进行下载安装: 1.使用pip方式下载安装 pip install pymysql 2.IDE方式 安装完成后就可以正常 ...
- MySQL 插入数据时,中文乱码问题的解决(转)
当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12',' ...
- Mysql插入数据的时候,中文乱码问题的解决
如果在Mysql中插入数据的时候,没有特定指定编码,可能会产生一系列的问题,例如,如果用insert语句的时候,可能提示incorrect values,等...究其原因,实际上无非是要让数据库和表中 ...
- ssm中从页面到controller和数据库出现乱码问题的解决
1.确保项目编码为utf8,点击项目右键,点击properties 2.确保数据库编码为utf8,以MySQL为例,可到mysql目录下,my.ini文件中修改后,重启mysql服务 重启mysql服 ...
- MySQL 插入数据时,中文乱码问题的解决
当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12',' ...
- jsp页面之间传中文参数显示乱码问题的解决
最近在项目中遇到jsp页面通过url传递参数,出现乱码,但是在本地是正常显示,在服务器上却是乱码,找了好久都没找到解决方法,最终在大神的帮助下解决了这个问题 比如从a.jsp像b.jsp页面传递参数 ...
- [ios]利用alertView 插入数据都数据库。笔记
利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...
随机推荐
- SQL Server中CROSS APPLY和OUTER APPLY的应用详解
SQL Server数据库操作中,在2005以上的版本新增加了一个APPLY表运算符的功能.新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行.它不像JOIN那样先计算那个表表达式都可以, ...
- eclipse 中的注释 快捷键
(1)Ctrl+Space 说明:内容助理.提供对方法,变量,参数,javadoc等得提示, 应运在多种场合,总之需要提示的时候可先按此快捷键. 注:避免输入法的切换设置与此设置冲突 (2)Ctrl ...
- ASP.NET vNext 概述
兼容Mono的下一代云环境Web开发框架ASP.NET vNext 我们知道了ASP.NET vNext是一个全新的框架,是一个与时俱进的框架.这篇文章将深入讨论在整体架构更多的细节,文档参照 ASP ...
- Visual Studio 2015 前端开发工作流
Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,之前的版本为:Visu ...
- Hadoop学习笔记—12.MapReduce中的常见算法
一.MapReduce中有哪些常见算法 (1)经典之王:单词计数 这个是MapReduce的经典案例,经典的不能再经典了! (2)数据去重 "数据去重"主要是为了掌握和利用并行化思 ...
- 扫描仪API接入大全:Twain, WIA 或 两者不具有.[换个思路 春暖花开]
最近做和扫描仪接入的扫描应用程序,深深感觉到了来自底层设备和WINDOWS协议的恶意.软件专业,对计算机深层次通知机制和协议,以及与之相连接的机器的接入协议和一些参数,当时并木有认真学习和了解,前一阵 ...
- Mac下安装与配置Go语言开发环境
1.官网下载安装包(需FQ) https://storage.googleapis.com/golang/go1.7.darwin-amd64.pkg 2.配置Go环境变量GOPATH和GOBIN ( ...
- JBoss AS
即 JBoss Application Server - JBoss Community The JBoss AS community project has been renamed to the ...
- JavaScript算法(归并排序与快速排序)
归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的. 目前看过的资料,归并排序看<学习JavaScript数据结构与算法>介绍的归并排序吧,快速排序直接看百度百科,讲的 ...
- poj 3630 Phone List
#include<iostream> #include<cstdio> #include<cstring> #define N 100005 using names ...
