搞定MySQL與phpMyAdmin數據庫的字符串亂碼問題

原出處http://blog.csdn.net/ExSystem/article/details/3706702

網上有很多網友都說MySQL裏面的中文亂碼問題特別的煩人,我也是這樣覺得的,我打算從一開始就讓網站全部採用Unicode(UTF-8)編碼的,認爲這樣才規範。

然而後來發現,光光在建立數據庫或者建立數據表的時候採用設定在SQL語句裏面的

CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'

這樣的方法,是不完美的,雖然說這樣能夠讓我的數據在自己的網頁裏面正常顯示多國語言文字,但是無論用phpMyAdmin還是命令行方式mysql程序顯示得到的數據都是非拉丁文字部分亂碼(對於我們來說,大多數就是漢字變成亂碼了,當然)。

究其原因,原來是MySQL對於字符集的支持有四個層次: 服務器(server),數據庫(database),數據表(table)和連接(connection),可見MySQL(4.0+版本)在設計的時候在對於多語言的支持就是不錯的,只能怪我們沒有仔細設置了(要麼或者說它設置太複雜了,呵呵)。

知道這個,那麼問題的原因就簡單了,現在我們的程序(網頁)是UTF-8的,同時連接層的是latin1(MySQL的默認設置),然後數據庫的又是utf8的,然後,我們從數據庫取數據,原來utf8格式的字符被latin1的連接層一處理,不是拉丁文的部分全部變成“?”字符,然後當然顯示到網頁的還是“?”。這樣就有亂碼了。

那應該怎麼解決呢?其實只要改改設置,還有在數據庫操作的時候注意一個小問題就可以了。

首先要設置my.ini文件,添加下面的內容就是了,當然確保數據庫設置爲utf8和utf8_unicode_ci。

[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
default-collation = utf8_unicode_ci
[mysql]
default-character-set = utf8

然後,還要在連接數據庫完成的時候設置client character set,比如用mysqli的時候就是要

$mConn = new mysqli();
$mConn->connect(/*...*/);
$mConn->set_charset('utf8');
//...

當然mysql庫也有相應的函數,就是mysql_set_charset,方法類似。

即使在mysql_conn()之後加上mysql_set_charset('utf8');

這樣,就完美解決了phpMyAdmin和MySQL的亂碼問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章