本文轉載自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 最后是從這個帖子里面找到了方法

[root@localhost bin]#
[root@localhost bin]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
[root@localhost 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 也給它再重啟一下
然后清除掉剛才顯示亂碼的瀏覽器緩存 終於來到了見證奇跡的時刻
