JSP与MySQL中文乱码问题的解决 (转了两个人的,神呐。。。)

折腾了1个小时,终于搞定,采用的是GBK编码,不过估计原理是一样的,用UTF8或者GB2312是一样的。
如果你明白原理,那么你完全不需要用网上人搞的什么转码。转来转去还是糊里糊涂。本博主就讲述一下,这个乱码的原因和解决原理,让你彻底清楚,不会瞎折腾。

乱码出现的原因,根本就是在于JSP,数据库连接方式,数据库的编码方式三者使用的不是同一种编码。就相当于A,B,C三个人,A说的是地球语,B说的是火星语,C说的也是宇宙大同语。但是A用地球语告诉B说:“你妈喊你回家吃饭”。结果B听成了火星语的“信春哥得永生”。传到C这里呢,C听不懂火星语,那么就听成了“绵羊音真好听”。但是,你不要以为这个过程是可逆的。如果你认为存在数据库中的“绵羊音真好听”可以按照原样的CtoBtoA再复原成“你妈喊你回家吃饭”,那你就大错特错了。因为不同的语言在传递的过程中有偏差,有损失。就好比你用汉语拼音去注释英语的发音,传上几个人,别人还知道你说的是啥吗?

知道了乱码的原因,那么废话少说,来看看如何解决吧。解决乱码的途径有两种,一种是找翻译,一种是统一说一种语言。第一种就是网上的各种转码方式了,我认为这个很麻烦。我觉得既然都是我写的程序,我干嘛要用多种语言。所以选择第二种统一语言的方式是最合适的了,也就是统一编码。

编码的统一主要在以下三个地方:JSP页面,数据库连接方式,数据库。

首先看一下数据库方面的编码设定,有两处需要修改,一个是mySQL的my.ini(很有用啊!!)文件,它位于MySQL Server 安装目录下,打开以后查找character,你会发现default-character-set=gbk这样一行,这里我就要用gbk,所以我就不改了,如果你要统一成其他编码,那么就要修改这里。另外一个地方是,建立数据库表的时候要写成这样。create table `immdb`.`admins`(
......
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
最后这句ENGINE=InnoDB DEFAULT CHARSET=gbk是设置建立的这个表使用的是GBK。

下面再看看数据库连接方式上编码需要注意的地方,它在connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/immdb?user=root&password=123456&useUnicode=true&characterEncoding=GBK");
最后的字符编码被指定为GBK。这样才能与数据库统一,不会在传递过程中发生乱码。

再看看JSP页面的编码修改位置,位于<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
但是还应该注意,如果在JSP页面传递form或者其他值的时候,有中文,那么,你还需要在JSP页面中加入<% request.setCharacterEncoding("GBK");%>(可能是在接收页面设置,不过我都设置了,也不管那么多了,呵呵)
在servlet中加入request.setCharacterEncoding("GBK");

response.setCharacterEncoding("GBK");


另外 这个东西很有用,留着,转自http://edge2009.iteye.com/blog/819466

1.查看mysql编码格式 show variables like 'character%';

2.如果可以修改mysql.cnf文件(ubuntu在/etc/mysql/mysql.cnf) 找到客户端配置[client] 在下面添加 default-character-set=utf8 默认字符集为utf8 在找到[mysqld] 添加 default-character-set=utf8 默认字符集为utf8 init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)

3.重启mysql

4.如果不能修改mysql.cnf文件请使用

--修改数据库编码 ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

--修改表编码 ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

--修改字段编码 ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

--查看数据库编码show create database database;

--查看数据表中字符集设置 show full columns from tablename; 或者 show create table tablename\G; 


你可能感兴趣的:(mysql,jsp,数据库,table,database,character)