1)、检查当前数据库编码。
使用语句:
2)、如果不是以上情况,需要将mysql编码设置为utf-8。具体步骤如下:
如果安装mysql时安装了“MySql Sever Instance Configuration Wizard”,则只需要启动该程序进行相应设置即可。如下面截图中所描述,需要将默认编码设置为utf8。
如果没有该程序,需要手动修改mysql编码。
1>、 编辑MySql的配置文件
MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是 /etc/my.cnf
--在 [mysqld] 标签下加上以下内容:
default-character-set = utf8
character_set_server = utf8
注意:如果此标签下已经存在“default-character-set=GBK”类似的内容,只需修改即可。
--在 [mysql] 标签下加上一行 default-character-set = utf8
--在 [mysql.server]标签下加上一行 default-character-set = utf8
--在 [mysqld_safe]标签下加上一行 default-character-set = utf8
--在 [client]标签下加上一行 default-character-set = utf8
character_set_client为客户端编码方式;
character_set_connection为建立连接使用的编码;
character_set_database数据库的编码;
character_set_results结果集的编码;
character_set_server数据库服务器的编码;
2>、 重新启动MySql服务
Windows可在服务管理器中操作,也可使用命令行:
net stop mysql 回车
net start mysql 回车
服务名可能不一定为mysql,请按自己的设置
Linux下面可是用 service mysql restart
如果出现启动失败,请检查配置文件有没有设置错误
3>、 查看设置结果
登录MySql命令行客户端:打开命令行mysql –uroot –p 回车,输入密码
进入mysql后 执行 :show variables like "% character %";
显示结果应该类似如下:
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
如果仍有编码不是utf8的,请检查配置文件,也可使用mysql命令设置:
另外:建立数据库时可以使用以下命令:
修改数据库编码的命令为:alter database app_relation character set utf8;
5、如果你采用的是外部接入的方式,可以在连接中确定请求的编码格式如:jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8(注意:不要出现任何空格,否则出错)
6、JSP页面传进来的参数中文就是乱码,则是前台的问题,这个时候写一个过滤器就好了,可以写如下的一个过滤器
public class EncodingFilter implements Filter {
String encoding;
private static final String DEFAULT_CHARACTER_ENCODING = "UTF-8";
public EncodingFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
try {
if ((encoding!=null)&&(encoding.length()>0)) {
request.setCharacterEncoding(encoding);
//验证是否进入这个if语句
System.out.println("in filter and encoding :"+encoding);
}else {
request.setCharacterEncoding(DEFAULT_CHARACTER_ENCODING);
}
} catch (UnsupportedEncodingException e) {
request.setCharacterEncoding(DEFAULT_CHARACTER_ENCODING);
e.printStackTrace();
}
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
//获取配置文件中的encoding
encoding = fConfig.getInitParameter("encoding");
//确认web容器初始化的时候这个filter也已经初始化了
System.out.println(encoding);
}
}
注意这有一个关键的地方,你使用过滤器的话,表单的提交方式必须是post,如果还是get方式,则还是乱码的
或者有个笨办法
7. 在b.jsp中把String name=request.getParameter("name");修改为
String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"GB2312");
2. 这时再在页面上显示,则就是中文了。
这样也可以的
2、第二种造成的方法就是数据库里面的字符集的问题,这个的问题不是比较专业的从事数据库的朋友,一般不太理解其中的原理,目前我只能参考别人的办法
转载来自:http://www.jb51.net/article/90304.htm
http://blog.csdn.net/red4711/article/details/6007248
http://blog.csdn.net/yipiankongbai/article/details/16937815
http://blog.csdn.net/frinder/article/details/7041723