當我們用PHP往MySQL資料庫裡插入中文時,一旦出現????亂碼,很多同學就抓狂了,身為中國人,你卻把中文漢字變成亂碼,那我可不答應,于是乎我們就開始奔波于個大論壇發帖求助....
對于MySQL中文亂碼其實常見的也就那麼幾個問題,處理好了就OK了,這裡總結了幾點解決方法,都是我們經常遇見的,大家可以對照着解決問題
1、Db編碼格式不正确
用status可以檢視目前資料庫的情況
mysql> status
--------------
mysql Ver 14.14 Distrib 5.5.32, for debian-linux-gnu (x86_64) using readline 6.2
Connection id: 54
Current database: mydbname
Current user: [email protected]
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.32-0ubuntu0.12.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 5 hours 18 min 41 sec
Threads: 1 Questions: 182 Slow queries: 0 Opens: 225 Flush tables: 1 Open tables: 55 Queries per second avg: 0.009
--------------
我們可以看到紅色字型标出來的兩行,發現問題了吧,Db和Server都是latin1,我們需要将他設定成utf8就能解決問題了。
這就需要我們在建立資料庫時,将編碼設定好,下面是設定編碼的示例:CREATE DATABASE `mydbname` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
别忘了,資料庫編碼設定好後還要設定表的編碼
CREATE TABLE `database_user` (
`ID` varchar(40) NOT NULL default '',
`UserID` varchar(40) NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、網頁編碼問題
這個問題UncleToo其實也沒完全搞明白,同樣是GB2312的程式,有時插入到MySQL是正常漢字,而有時候卻成了亂碼,我的解決辦法就是在需要與MySQL互動時就在程式裡給出 set names utf8 指令,如果你有其他更好的辦法也可以一起交流一下。
3、改變資料庫預設編碼
使用 SHOW VARIABLES LIKE ''character_set_%''檢視資料庫字元集
mysql> SHOW VARIABLES LIKE ''character_set_%'';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
這時,我們需要将latin1編碼改成utf8。
找到my.ini檔案(#開頭的是注釋部分)在MySQL組下修改
default-character-set=utf8
或者直接輸入指令修改:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
以上三種亂碼情況是最常見的,也是新手經常遇到的,這裡一起分享給大家,希望能給大家帶來幫助。
其他中文亂碼問題UncleToo暫時還沒遇到過,如果您碰到了且有很好的解決辦法,可以告訴我們,并分享給大家
更多MySQL技術,請登入http://www.uncletoo.com