貓城

BLACKCAT CASTLE

如何解決mysql資料庫亂碼問題

   165 VIEWS

之前在整理黑貓城的資料庫時就發現編碼有問題,一直沒空處理,今天正好可以來解決這個問題,順道發一篇分享,希望能幫到有需要的朋友。我的情況是客戶端顯示正常,但資料庫插入中文資料會變成亂碼,以下順道總結各種亂碼情況。

如何解決mysql資料庫亂碼問題

Mysql 資料庫出現亂碼大部分是因為以下三個原因,第一是 Mysql Server 本身的編碼問題,第二是 Mysql table 的語系設定問題,第三是連線資料庫的程式碼語系設定問題。因此需要先確保第一跟第二的設定沒有問題,最後就是在連線資料庫的程式碼中加上指定語系即可。

一、Mysql Server 本身的編碼問題

進入 phpMyAdmin 中的資料庫,接著進入「操作」,在最下面的「 編碼與排序」確認是否為「utf8mb4_unicode_ci」。

補充

utf8mb4_unicode_ci 是什麼意思?

簡單說 utf8 是可變長度的編碼,能支援中文、日文等,utf8mb4 跟 utf8 一樣,但比 utf8 還要能支持更多位元集(一個字符最多可有 4 位元),因此能顯示更多的字串,並且兼容 utf8 特性,算是 utf8 的進階版。而 unicode 比 general 要來得更精準,例如「ā」在 general 中顯示為「a」,但在 unicode 中顯示「ā」。ci 表示不分大小寫。

二、Mysql table 的語系設定問題

進入 phpMyAdmin 中資料庫,接著在「結構」中確認每一張資料表的編碼是否為「utf8mb4_unicode_ci」。

三、連線資料庫的程式碼中加上指定語系

最後就是確認連線資料庫的程式碼是否有指定 utf8mb4,例如在 php 程式碼加上charset=utf8mb4

範例:
try{
$db = new PDO('mysql:host=localhost;dbname=yourdb;charset=utf8mb4','root','');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
  print "couldn't connect to the database:". $e->getMessage();
}
這樣就大功告成了。
如何解決mysql資料庫亂碼問題


時雨 時雨,時雨の町-日文學習園地站長,為了記錄網站維護的日誌而架設本網站,並以家中黑貓命名為黑貓城,順道分享各種架站相關知識與網頁程式語言。也歡迎各位到我的日語教學網站學習日文 :)

LEAVE A REPLY

COMMENTS