解決 MySQL 資料庫插入中文資料時會變成亂碼的問題

MySQL 會出現中文亂碼的原因不外乎下列幾點:

  1. MySQL server本身設定問題,例如預設編碼 DEFAULT CHARSET=latin1
  2. MySQL table 的語系設定問題 (包含 character 與 collation (校對))
  3. 客戶端程式(例如 php) 的連線語系設定問題
MySQL 4.1 及之後的版本在語系方面增加了許多功能,它可以設定語系的層次從最底層的 server, database 到單一 table, column, connection 都可以設定,而除了語系之外,還可以指定搭配不同的 collation (校對),所以組合種類很多,只要一個錯了就難逃亂碼的命運。

這幾天測試了一下: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

沒有留言:

張貼留言

精選文章

解決 MySQL 資料庫插入中文資料時會變成亂碼的問題

MySQL 會出現中文亂碼的原因不外乎下列幾點: MySQL server本身設定問題,例如預設編碼 DEFAULT CHARSET=latin1 MySQL table 的語系設定問題 (包含 character 與 collation (校對)) 客戶端程式(例如 ...

Popular Posts