首頁 > 資料庫 > mysql教程 > 為什麼不要在MySQL中使用UTF-8編碼方式

為什麼不要在MySQL中使用UTF-8編碼方式

步履不停
發布: 2019-06-19 14:01:04
原創
2503 人瀏覽過

為什麼不要在MySQL中使用UTF-8編碼方式

#MySQL的UTF-8編碼方式

MySQL 從4.1 版本開始支援UTF-8,也就是2003 年,然而目前流行的UTF-8 標準(RFC 3629)是在此之後規定的。正因此,才造就了MySQL中的UTF-8與我們日常開發中的UTF-8不一致,從到導致了一些問題。 MySQL的UTF-8只支援每個字元最多三個位元組,而真正的 UTF-8 是每個字元最多四個位元組。

問題重現

有資料庫表如下:utf8編碼方式

下载 (2).jpg

#往資料庫存一筆記錄:

@Test public void testInsert() {     User user = new User();     user.setUsername("\uD83D\uDE00 ");     user.setPassword("123456");     userRepo.save(user); }
登入後複製

這裡只是部分程式碼,看不懂沒關係,這裡是給user表插入一筆記錄。其中username是\uD83D\uDE00 。

其實\uD83D\uDE00是一個emoji表情。

為什麼不要在MySQL中使用UTF-8編碼方式

因為MySQL中utf8字元集只支援三位元組UTF-8編碼的Unicode範圍,而emoji字元屬於四位元組編碼部分,所以程式運行預期是會報錯的。運行這段程式碼:

為什麼不要在MySQL中使用UTF-8編碼方式

與預期一致,報錯了。

解決問題

雖然MySQL的UTF-8有缺陷,但MySQL(包括mariadb)官方卻沒有修復此bug,而是透過2010年重新發布的「utf8mb4」來支援真正的UTF-8。因此想要解決此問題,只能夠將MySQL資料庫設定為utf8mb4字元集才行。

總結

這個問題,也是因為某次儲存資料的時候保存了一個emoji表情才發現的。其實最早開始用MySQL的時候,就有發現一個utf8mb4了,但自己卻沒有卻去了解UTF8和UTF8MB4的差別。透過這次教訓,以後使用MySQL就老實的設定字符集為utf8mb4吧。

更多MySQL相關技術文章,請造訪MySQL教學##欄位學習!

以上是為什麼不要在MySQL中使用UTF-8編碼方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板