本文转载自http://blog.163.com/lucia_gagaga/blog/static/26476801920167256342858/
项目部署完毕之后 数据库里面的数据读到页面上是乱码 就像这样子:
为
了解决这个乱码问题 花费了一周的时间 请教了好多老师同学同事
最后是做了这么几件事才给搞好的:
1. 借助 notepad++ 把
.sql 文件的编码格式改成 utf8
2. 替换 mysql 的 my.cnf 文件 并加入指定字符集的语句
3.
使用终端命令重新导入 .sql 文件
4. 各种重启 清除浏览器缓存
首先解释[1. 借助 notepad++ 把 .sql
文件的编码格式改成 utf8]:
项目使用的 .sql 文件是从 war 包里面自动解压出来的 使用 vim 命令观察下:
这
个自动解压出来的文件 本身就显示为乱码了
把它从 Linux 下面拿到 windows 下面 使用 notepad++ 打开 保存为
utf8 无 BOM 格式
然
后给它移回到原来的位置
因为本项目做成了一个 nginx 后面挂载两个 tomcat 的架构 所以两个 tomcat 下面的 .sql
文件都要处理
处理完了之后 使用 vim 命令再次检查下 确保 .sql 文件本身已经没有问题了:
然
后来解释[2. 替换 mysql 的 my.cnf 文件 并加入指定字符集的语句]
首先看下替换之前的 my.cnf 文件:
这
个文件的作用之一 就是指定 mysql 的字符集 字符集与乱码问题一定有关
但是这个文件 一看就是之前经过了多次删减 已经被改动得面目全非
缺少了很多内容 不能继续使用了
在这个文件的作用下 当前 mysql 的字符集是这样的:
而
正确的字符集应该是这样的:
所
以 需要替换一个正确的 my.cnf 文件过来 那么 去哪里找这个正确的 my.cnf 文件呢?
http://www.cnblogs.com/HondaHsu/p/3640180.html
最后是从这个帖子里面找到了方法
[[email protected]
bin]#
[[email protected] bin]# cp /usr/share/mysql/my-medium.cnf
/etc/my.cnf
cp: overwrite `/etc/my.cnf‘? y
[[email protected] bin]#
然
后 使用 vim 命令 修改这个替换过来的 my.cnf 文件
改
好之后 随手把 mysql 重启一下 再来查看 mysql 的字符集
这
时候 字符集已经改对了 感觉距离胜利又近了一步
再来解释[3. 使用终端命令重新导入 .sql 文件]
现在 .sql
文件也是好的 mysql 的默认字符集也是好的 就差导入 .sql 文件了
为了防止第三方工具篡改 .sql 文件
(事实上踩过坑之后知道第三方工具确实有时候会篡改 .sql 文件)
所以使用命令行方式来做这件事是最保险的
mysql>
show databases;
mysql> drop database dangdang_lucia;
mysql>
create database dangdang_lucia;
mysql> use dangdang_lucia;
mysql>
source /usr/local/tomcat1/webapps/dangdang_dk/WEB-INF/classes/dang.sql
导
入之后 直接 select 一下 最后一次确认没有乱码的存在:
最
后就是[4. 各种重启 清除浏览器缓存]
这个就是为了保险起见 把 nginx 重启 两个 tomcat 分别重启 mysql
也给它再重启一下
然后清除掉刚才显示乱码的浏览器缓存 终于来到了见证奇迹的时刻