有時我們還是會在 MySQL 的console進行操作,但如果選取在印出中文字時出現亂碼,如下的情況:
+------------+
| p_name |
+------------+
| ????022 |
| ????51 |
| ????003 |
| ????118 |
| ????054 |
---- 以下略 ----
怎麼辦?
這時我們先來查看預設的編碼:
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)
這時我們可以用偷懶的方法:
他會改變character_set_client、character_set_connection、character_set_results 這三個參數
這樣就解決亂碼的問題。
事實上,我們只要改變character_set_results 這個參數設定成正確的編碼即可:
以上是 runtime 的解決法,如果要永久設定,就需要修改 my.cnf
# vi /etc/my.cnf
在找到[mysqld] 欄目在其中添加
init_connect='SET NAMES utf8'
上面的設定是讓client 端每次連接資料庫,首先會執行 init_connect 內之sql語句。但要注意的是 init_connect 對於如root等具有SUPER privilege的用戶會無效。
另一種方法是讓編碼方式全部改為 utf8
default-character-set=utf8
備註
註:剛安裝完畢時是沒有 my.cnf 這個檔案,我們要去尋找樣版並把他拷到 /etc/my.cnf
[FREEBSD]
在freebsd 中他的樣版檔是放在
/usr/local/share/mysql/my-small.cnf
/usr/local/share/mysql/my-medium.cnf
/usr/local/share/mysql/my-large.cnf
/usr/local/share/mysql/my-huge.cnf
/usr/local/share/mysql/my-innodb-heavy-4G.cnf
或是
/usr/ports/databases/mysqlxx-server/work/mysql-5.x.x/support-files/my-zzz.cnf xx是版本號,zzz是模版類別
[Centos]
樣版檔是放在 /usr/share/mysql/
只要選定合適的設定,把他複製為 /etc/my.cnf 就可以了,我的習慣是專門用 mysql 的機器,我會複製 my-huge 這個檔,和www共用的機器,我會複製 my-large 這個檔。
原文編自 2010-03-08 13:13:06