2019/06/12

[PHP] 解決連線 MySQL 錯誤訊息亂碼顯示問題

問題

一直以來這亂碼問題遇到的重覆不下 N 次,後來看到 SQLSTATE[HY000] [2002] 的錯誤代號,可以直覺反應就是連不到資料庫

Trace 出來的錯誤訊息實際是長這個樣子的,這是因為 MySQL 預設輸出錯誤訊息的是以 UTF-8 輸出,而非二進制的字符字串值從其字符集轉換為 UTF-8 就產生像以下的編碼狀況

mysqli_connect(): (HY000/2002): \xb5L\xaak\xb3s\xbdu\xa1A\xa6]\xac\xb0\xa5\xd8\xbc\xd0\xb9q\xb8\xa3\xa9\xda\xb5\xb4\xb3s\xbdu\xa1C\r\n

我們看顯示的樣子就像下圖,以使用者端來看就是有點不開心

解決方法

用 mb_convert_encoding 的方式,先將取得編碼訊息轉成 utf-8 (以繁體中文的來說就是 big5)

如此就能正常顯示中文訊息啦

References