以基于Servlet+Mysql构建网站为例,网页/数据库出现中文乱码的原因:数据在流动的任意节点处,编码不一致,出现乱码。
数据流动的任意节点,分为两块,分别是Web和数据库:
- Web:网页、Jsp页面、Java代码文件、Tomcat读取的web.xml
- 数据库:Mysql的client/server/connection以及数据库/表/字段
要使乱码不出现,须使任意的数据节点编码一致,在此之前先了解以下知识:
- 字符集:Laruence写的深入Mysql字符集设置,以及Mysql字符集设置详解。
- 编码:GBK和UTF-8有什么区别?,以及前端工程师与字符编码及更多。
在学习上面关于字符集以及编码的知识后,下面我们就谈谈如何解决Mysql中文乱码(Web方面的可以自行Google,大同小异)。
1.将mysql-version/support-files/my-default.cnf 复制一份到 /etc 下面,并改名为my.cnf (Window下叫my.ini)
2.「Mysql的client/server/connection以及数据库/表/字段」编码设置为utf8,添加以下内容至my.cnf中
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
4.重启Mysql,进入Mysql,输入show variables like 'char%’;
5.在保证所输入数据库的内容格式为utf8的情况下,一般可以解决Mysql中文乱码。
更多关于Mysql设置utf8,以及修改my.cnf的内容参见Stack Overflow上的讨论。
网友评论