MySQL 遇到中文亂碼最主要的原因是 CHARACTER SET 不支援中文顯示!
解決這個問題的最佳方案為
設定 CHARACTER SET 為 UTF8,因為 UTF8 支援所有字符!
設定 CHARACTER SET 為 UTF8,因為 UTF8 支援所有字符!
首先進到 MySQL,查看默認的編碼格式
mysql > show variables like "%char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
我們可以發現,character_set_database 與 character_set_server 皆為 latin1 編碼。
透過下面指令,修改這兩個的預設編碼
mysql > set character_set_database = "utf8";
mysql > set character_set_server = "utf8";
修改後再次檢查編碼
mysql > show variables like "%char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
全數編碼皆改為 UTF8。
到這裡如果已解決中文亂碼的問題,恭喜你!只不過,筆者如果重啟 Apache,會發現character_set_server 預設的編碼又變成 latin1。這時候只好從根本下手,修改 my.cnf 內的設定。
$ sudo vi /etc/mysql/my.cnf
1. 在 [client] 段落裡加入:
default-character-set=utf8
2. 在 [mysqld] 段落裡加入:
character-set-server=utf8
init-connect="SET NAMES utf8"
collation-server=utf8_unicode_ci
3. 在 [mysql] 段落裡加入:
default-character-set=utf8
存檔後重啟 MySQL:
$ sudo service mysql restart
這樣就從根本解決 MySQL 中文顯示亂碼的問題囉~
當然,在建立 database 的時候別忘了將編碼設定為 UTF8 唷!XD
mysql > create database YOUR_DB default character set utf8;
沒有留言:
張貼留言