Google搜查列

 

2008年8月25日 星期一

mysql + php 使用utf-8

很多人在使用mysql和php作網頁程式的撰寫

但同時想使用utf-8編碼

但這三樣東西合在一起,就會給很多人產生很多煩惱

就是寫入Datebases的資料和讀出來的資料都變成亂碼了

倒地要怎麼作,才能完完全全的把我想要的國際碼utf-8完整寫入datebases和完整讀出來呢

我在過去也是因為這個問題研究了很久,找了很多資料

現在有心得分享給大家

主要要三個條件同時成立,才能有完整寫入和讀取的效果

1.MySQL資料庫裡的Datebases、Tables和欄位在建立時,必須要是utf8_bin的文字校對屬性
2.php網頁文件的內文必須儲存成utf-8格式,及html的utf-8宣告
3.IIS或Apache 跟Mysql之間連線要使用UTF-8

以上三點是很必要的,我來一點一點說吧

1.MYSQL文字校對:

先對所需要存放資料的mysql資料庫格式作個改變
如已經建立的Datebases,就可以下指令變更資料庫格式 (以照你的環境變更藍色字體的資料庫名稱)
ALTER DATABASE `datebases_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

變更datebases 之後,就要對tables作變更了 (以照你的環境變更藍色字體的表格名稱)
ALTER TABLE `tables_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ROW_FORMAT = DYNAMIC

再之後要變更你的儲存格為utf-8了 (以照你的環境變更藍色字體的欄位名稱) 例子為變更account的欄位
ALTER TABLE `datebases_name`.`tables_name` CHANGE `account` `account` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

*注意:欄位的屬性跟可不可以下
CHARACTER SET utf8 COLLATE utf8_bin有關,比如int、smallint等,變成utf8會沒什麼意義,所以要注意欄位的特性

2.就是php的文件格式
以很多種編輯軟體來說,當你在存檔時,可以選擇UTF-8,以記事本來說,另存新檔就有UTF-8格式可選擇


其他的編輯軟體,也都要這樣改變文件格式,以我知道的FrontPage 2003、Pspad等都有支援utf-8

3.文件內文的語法
先說html吧,至少要下一行
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
這行是告知連線上來的瀏覽器,網頁內容是使用UTF-8編碼的

再來在PHP的內文加上這三行,告知PHP Apache跟mysql連線要資料時,是使用utf-8

mysql_query("SET CHARACTER_SET_CLIENT=utf8"); //第二行
mysql_query("SET CHARACTER_SET_RESULTS=utf8"); //第三行
?>

Google Analytics