MySQL 會出現中文亂碼的原因不外乎下列幾點:
- MySQL server本身設定問題,例如預設編碼 DEFAULT CHARSET=latin1
- MySQL table 的語系設定問題 (包含 character 與 collation (校對))
- 客戶端程式(例如 php) 的連線語系設定問題
這幾天測試了一下:AngularCode / AngularJS Demos 的 Facebook type search autocomplete / typeahead using AngularJS+PHP+MySQL,覺得非常不錯!也嘗試著把它改為中文,可是、卻出現一堆亂碼 " ?? "。
[修改資料庫檔案] 在 Notepad++ 操作,把 countries.sql 資料庫檔案的第 21 行
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=249 ;
改成
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=249 ;
[先刪除資料庫] 在 phpmyadmin 的操作,於左側欄選取 angularcode_autocomplete 資料庫,再按右側的 刪除資料庫 (DROP) 刪除之前在 phpmyadmin 匯入的 angularcode_autocomplete 原始資料庫
[再新增資料庫] 在 phpmyadmin 的操作,在 phpmyadmin 左側欄按新增,右側就出現 資料庫 -> 建立新資料庫。請輸入資料庫名稱 (angularcode_autocomplete) -> 選擇編碼與排序 (請選擇 utf8_general_ci) -> 按建立,於是資料庫名稱 (angularcode_autocomplete) 就建立起來了。{utf8_general_ci (ci 代表 case insensitve 大小寫沒差異)}
[匯入資料庫] 在 phpmyadmin 的操作,選擇檔案:選擇在 Notepad++ 修改好的 countries.sql 資料庫檔案,檔案編碼請選擇 utf-8 然後按執行。
瀏覽一下剛匯入的 countries.sql 資料表,成功了、資料表的中文亂碼 " ?? " 已消除!
好不容易解決了資料庫匯入的亂碼問題,卻又出現顯示出來的網頁又是 " ?? " 亂碼。
進入 phpmyadmin 找到可輸入 sql query 的畫面,然後鍵入:
show variables like '%character%';
按執行
執行後發現 character-set-server 是 latin1 編碼。
請修改 MySQL 安裝目錄中的 my.ini 檔案
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
[client]
default-character-set = utf8
加入以上的設定後儲存並重新啟動 MySQL - 千萬要記得!
進入 phpmyadmin 找到可輸入 sql query 的畫面,然後鍵入:
show variables like '%character%';
按執行再驗證一下,看看 character-set-server 是否都已改成 utf8 編碼
最後、開啟網頁測試一下中文是否正確顯示
參考資料:
http://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf
https://dev.mysql.com/doc/refman/5.0/en/charset-applications.html
http://www.chou-it.com/info/infra/db/mysql_01.html
http://kosalads.blogspot.tw/2013/03/mysql-55-how-to-change-mysql-default.html
沒有留言:
張貼留言