1. 程式人生 > 資料庫 >為何不要在MySQL中使用UTF-8編碼方式詳解

為何不要在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編碼方式

往資料庫存一條記錄:

@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中utf8字符集只支援三位元組UTF-8編碼的Unicode範圍,而emoji字元屬於四位元組編碼部分,所以程式執行預期是會報錯的。執行這段程式碼:

與預期一致,報錯了。

解決問題

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

總結

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

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。