JSP在写入数据库的时候有时会出现乱码问题,如下所示:
乱码的出现一般有两种原因:
一、 数据库编码选择不对
修改数据库编码以MySql数据库设置utf-8为例,MySql数据库的默认编码为latin,修改数据库编码问题方法如下:
1. 在DOS命令行中输入SHOWVARIABLES LIKE 'character%';可以查看目前数据库的编码状态,由于笔者的编码信息已修改为utf-8,所以显示如下:
2. 命令行设置编码命令:
a) SETcharacter_set_client = utf8;
b) SETcharacter_set_connection = utf8;
c) SETcharacter_set_database = utf8;
d) SETcharacter_set_results = utf8;
e) SETcharacter_set_server = utf8;
f) 但这样设置只在当前会话状态中有效,重启MySql服务后会失效。
3. 另一种不会失效的方法是修改安装目录下的my.ini 文件,修改前要停止MySql服务,my.ini文件路径一般为\ Program Files\MySQL\MySQLServer 5.5。
a) 打开my.ini文件,在[client]、[mysql]、[mysqld]标记下分别添加default-character-set=utf8语句,但是注意这三个标记下如果有default-character-set编码设置只需修改值为utf8即可,不然MySql服务会启动失败。
b) 重启MySql服务。
c) SHOW VARIABLES LIKE'character%';查询编码发现编码已更改。
4. 还有一种万能的方法是重装数据库软件,但是这种方式只适合数据库中没有数据的情况,而且卸载会面临着注册表清除问题,这个笔者将另外介绍。
二、 JSP编码选择不对
有时候我们的数据库编码正确了,但是程序编码不正确还是会出现乱码问题。了解编码问题首先了解程序提交数据问题,数据提交如下图所示:
程序要保证提交的数据不是乱码,数据库的存储才不会出现乱码。控制乱码包括控制浏览编码、request/response对象的编码,数据库连接编码。这里只需确定request对象和数据库的连接编码即可。
1. request对象编码
a) 在Servlet获取数据前加上request.setCharacterEncoding("utf-8");语句。
2. 数据库连接编码
a) 配置文件数据库访问路径可带参数dbUrl=jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8
经过上几次试验通常能解决数据库存储乱码问题。
Author:事始
Introduction:自由职业
Sign:只要你还在尝试,就不算失败。