数据库中文乱码问题

中文乱码问题:

1)原因:数据库的编码与读取时的编码不一致;jsp页面的显示保存编码与读取到的编码不一致;数据库的编码不统一,尤其是数据库的server

2)解决方法:

<1>连接mysql数据库的驱动url改为:jdbc:mysql://localhost:3306/lj?useUnicode=true&amp;characterEncoding=utf-8

<2>mysql数据库编码设为同一的utf-8:

set names 'utf8';

set character_set_filesystem='utf8';

show variables like 'character_set_%';

<3>jsp文件的编码设为utf-8:

<%@page pageEncoding="utf-8"%>

<4>html文件内容的编码设为utf-8:

<meta http-equiv=Content-Type content="text/html; charset=utf-8" />

<5>所有的文件保存时使用utf-8编码格式保存

产生乱码的原理及解决办法:

1)产生乱码是由于在某个环节的两端编码方式不一致或者终端(浏览器等)

不支持;另外也可能是tomcat服务器不稳定的问题,如果是tomcat服务器产生的原因,则需要到tomcat服务器安装目录的bin文件夹下修改配置

2)解决办法:

@ 从页面接受的数据使用编码进行重新编译,(要注意gbk与utf8把中文当作几个字节来看),如接受到数据后,在取出数据之前,需设置编码request.setCharacterEncoding(“utf-8”),在得到输出流out之前也要设置response.setCharacterEncoding(“utf-8”)

@ 向数据库中存储数据之前,先确保数据都使用了同一的编码(至少在插入数据的时候),表、源文件都设置一下,全部使用同一的编码如utf-8,以mysql为例:[create database xxx CHARACTER SET charset_name

][set names 'utf-8'],然后查看是否所有的字符集都是同一种,不是则单独设置(方法见上文)。建表也许设置编码CREATE TABLE xxx (

) ENGINE=InnoDB AUTO_INCREMENT=198 DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT; 接下来执行sql脚本就行了。

@ 从数据库中取出数据后也要重新编码

latin1 

binary

猜你喜欢

转载自dazhi4java.iteye.com/blog/1596517