java mysql characterencoding_JAVA 常见乱码问题及MYSQL character_set_server 设置

最近接手一个手机端服务端的程序(JAVA实现),我这边测试的话前台直接用的get方式传数据,

get请求编码方式和post请求提交编码方式不同,get是把数据直接放到url中,例如以上的uname,IE浏览器先对中文进行utf-8编码(一个中文3个字符表示 太长),继而为了缩短字符又用ISO8859-1编码后传递给服务器。服务器的doGet方法中要先进行ISO8859-1解码再utf-8解码才能看到中文。

post请求则在浏览器端把数据以utf-8的形式存储到http的请求体中,不用通过url传输,继而只要    request.setCharacterEncoding("utf-8");通知request以utf-8形式解码就行,因为request默认以ISO8859-1进行解码的。

第一种我们可以针对方法设置编码格式(这个设置必须在Writer之前,否则无效)

response.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

或者

content=new String(content.getBytes("iso-8859-1"), "UTF-8" );

第二种我们可以自己写过滤器(推荐方案)private String charset;

public void init(FilterConfig config) throws ServletException {

System.out.println("init");

// 获取web.xml文件里面的

// encode

// gbk

//  name为encode的值 为gbk

charset = config.getInitParameter("encode");

}

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {

request.setCharacterEncoding(charset);

response.setCharacterEncoding(charset);

System.out.println(charset);

chain.doFilter(request, response);

}

public void destroy() {

System.out.println("destroy");

}web.xml

encodingFilter

com.sjs.filter.EncodingFilter

encode

UTF-8

encodingFilter

/*

/filter-mapping>

第三种我们直接修改tomcat的 server.xml

connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8"/>

以上三种基本上就可以解决问题了,

但是我们还有一个问题,就是数据库(MYSQL)设置,一定要记得安装向导的时候一定你 Character Set设置成utf8的时候一定要选中(今天我碰到的问题就是这),

1_100612113212_1.jpg

这里设置错了你mysql工具里面是查看数据库编码是看不到的,只能通过 show variables like "%char%"; 命令查看设置

e996f76e68ed22ff5e4bed1edde1328f.png

红框框就是向导设置的编码,没有设置之前latin1,如果要修改这个值的话只能是运行mysql/bin/MySQLInstanceConfig.exe,重新设置

不要用命令( set @@character_set_server='utf8';)服务重启之后就无效了!这个地方设计的不太明白,改变这个值以后要重启,重启之后这个设置又会无效!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值