PHP連線SQL資料庫無法顯示emoji表情的解決辦法(變成問號、1366 Incorrect string value)

thyyyyyyyy發表於2020-12-31

問題1

當加入emoji表情時,SQL資料庫提示1366 Incorrect string value錯誤:

mysql 1366: Incorrect string value: '\xF0\x9F\xA5\xB0\xF0\x9F for column ‘msg’ at row 1

這是因為emoji表情符號不能直接使用普通的utf-8編碼,而是要採用utf8mb4編碼,在每次連線的時候把編碼設定成utf8mb4才可以解決。

解決步驟:

  1. 在連線資料庫的php檔案裡,在每次連線前都把編碼都設定為utf8mb4

程式碼:

$conn = new PDO($dsn, $username, $password);
$conn->exec("set charset utf8mb4");

或者:

$conn = new PDO($dsn, $username, $password);
$conn->query("set character set utf8mb4");

問題2

emoji表情被成功加入,但是在資料庫裡面變成了問號,如下圖

這是因為資料庫的編碼仍然是utf8,而不是utf8mb4,解決方法十分簡單粗暴:把資料庫裡面有關字元編碼的專案全部改為utf8mb4,因為utf8mb4是utf8的超集,因此不會有相容性問題,可以放心修改

修改欄位的編碼
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

修改資料庫的編碼
在這裡插入圖片描述
在這裡插入圖片描述
修改表的編碼請新增圖片描述
通用修改
在這裡插入圖片描述

相關文章