天天看點

debian mysql中文亂碼_MySQL中文亂碼的解決方法彙總

當我們用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