jsp解决mysql乱码_JSP及MySQL乱码解决方案

在jsp的web开发中,因为涉及到多方面的通信请求,乱码的发生不可避免,在这里为大家总结一部分的页面乱码和数据库乱码的解决方法。乱码的发生根本原因在于编码方式的不同,为什么要编码?这是因为平时我们写的程序属于高级语言,机器不懂,所以需要转换为机器懂的语言,而各国本地语言又不一样,乱码也就是在本地语言显示的是时候出错,所以多种的编码方式,就是有很多种将自己国家语言转化成机器语言(二进制)的一套编码方式。像国内使用的是GBK编码方式,国际编码方式是UTF-8,其实对中文的开发,知道这两个就够了。

再来了解下web开发过程中需要编码转换和通信的地方,见图(博客内的图基本上都是自己画的,不准确地方还望海涵啊)

0818b9ca8b590ca3270a3433284dd417.png

接下去大概就分三个方面来说明,需要注意的是,编码方式要统一,要么全部都用GBK要么都用UTF-8编码,这里建议使用国际编码UTF-8,下面都是以utf-8为例。

页面显示

页面编码,是jsp或是html显示在浏览器上时候编码,默认的是ISO-8859-1,这里需要设置页面编码:pageEncoding="utf-8"。

大家知道jsp页面内容都是会被翻译成java语言然后进行编译处理的,这个过程中也需要指定其编译时候的编码方式:contentType="text/html" charset="utf-8"。

以上两个编码只要指定一个,另外一个就默认等同。

页面间传递参数信息(一般是form形式)需要指定编码方式:request.setCharacterEncoding("utf-8") 。

还要指出的一点(不常用),如果利用超链接传递中文字符需要强制转换编码(假设传递的是name属性,在接收页面需要设置)String name = request.getParameter("name") ;String newName = new String(name.getBytes("iso-8859-1"),"utf-8") ;

web容器

需要设置tomcat的编码方式:

port="8080"

redirectPort="8443"

connectionTimeout="20000"URIEncoding="UTF-8"/>

数据库

以mysql为例,mysql有六种编码,在登录mysql查看

SHOW VARIABLES LIKE 'character_set_%';

+--------------------------+----------------------------+

| Variable_name                             |  Value     |

+--------------------------+----------------------------+

| character_set_client                    |  latin1     |

| character_set_connection         |   latin1    |

| character_set_database            |   latin1    |

| character_set_results                 |   latin1    |

| character_set_server                  |   latin1    |

| character_set_system                |    utf8      |

| character_sets_dir | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

SHOW VARIABLES LIKE 'collation_%';

+----------------------+-------------------+

| Variable_name                 | Value |

+----------------------+-------------------+

| collation_connection       | latin1_swedish_ci |

| collation_database          | latin1_swedish_ci |

| collation_server                | latin1_swedish_ci |

+----------------------+-------------------+

第一列表示编码名称,第二列表示编码方式,这里为什么默认使用Latin1编码方式呢?有中说法是,latin1编码方式的时候mysql的执行效率最高,具体是不是等各位自己考证了。根据Variable_name大概也能知道分别指的是什么编码,client指输入mysql时候编码,results就是从mysql返回结果的编码,其他具体的就不追求了。如果因为mysql数据库出错了,最方便的解决就是查看是否编码方式没统一,要将所有编码方式都修改成utf-8。

利用set "variable_name"(具体名称) ="UTF8"例如:setcharacter_set_client ="UTF8"这里注意不是“UTF-8”没有“-”的。当然通过修改配置文档也能修改编码,还有在创建数据库的时候指定编码方式等都是可以。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值