首頁 >後端開發 >php教程 >MYSQL utf8mb4 插入emoji表情亂碼

MYSQL utf8mb4 插入emoji表情亂碼

WBOY
WBOY原創
2016-08-04 09:21:141606瀏覽

關於MYSQL utf8mb4字串集的問題。

表結構如下:

MYSQL utf8mb4 插入emoji表情亂碼

如下碼:

<code class="php">$db     = new mysqli('x', 'xxx', 'xxxxx');
$db->select_db('xxx');
$db->set_charset('utf8mb4');

//这里是一个emoji表情
$contents = <<<EOT
"\ud83d\udca5"
EOT;

$contents = json_decode($contents). "hello";
echo $contents, "\t\n";

$sql    = "INSERT INTO `utf8mb4`(`contents`) VALUES('$contents')";
echo $sql, "\t","\n";
$db->query($sql);
print_r($db->error_list);
echo "\t\n";
exit();</code>

但是入庫後,是一個? 如下圖:

MYSQL utf8mb4 插入emoji表情亂碼

求解決。

回覆內容:

關於MYSQL utf8mb4字串集的問題。

表結構如下:

MYSQL utf8mb4 插入emoji表情亂碼

如下碼:

<code class="php">$db     = new mysqli('x', 'xxx', 'xxxxx');
$db->select_db('xxx');
$db->set_charset('utf8mb4');

//这里是一个emoji表情
$contents = <<<EOT
"\ud83d\udca5"
EOT;

$contents = json_decode($contents). "hello";
echo $contents, "\t\n";

$sql    = "INSERT INTO `utf8mb4`(`contents`) VALUES('$contents')";
echo $sql, "\t","\n";
$db->query($sql);
print_r($db->error_list);
echo "\t\n";
exit();</code>

但是入庫後,是一個? 如下圖:

MYSQL utf8mb4 插入emoji表情亂碼

求解決。

這樣是對的。
說下前提,utf8mb4和utf8的差別就是utf8才用3位元組碼儲存數據,而utf8mb4用4位元組碼儲存資料。
emoji表情是4位元組碼透過前段轉義出來的,它本身是不可讀的字符,所以在資料庫客戶端中會顯示「?」。
在前端支援emoji的地方就會顯示emoji表情。

確定下客戶端是否支援utf8mb4,最好使用的時候 set names下。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn