為何不要在MySQL中使用UTF-8編碼方式詳解
MySQL的UTF-8編碼方式
MySQL 從 4.1 版本開始支持 UTF-8,也就是 2003 年,然而目前流行的UTF-8 標準(RFC 3629)是在此之后規(guī)定的。正因此,才造就了MySQL中的UTF-8與我們日常開發(fā)中的UTF-8不一致,從到導致了些問題。MySQL的UTF-8只支持每個字符最多三個字節(jié),而真正的 UTF-8 是每個字符最多四個字節(jié)。
問題復現
有數據庫表如下: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字符集只支持三字節(jié)UTF-8編碼的Unicode范圍,而emoji字符屬于四字節(jié)編碼部分,所以程序運行預期是會報錯的。運行這段代碼:
與預期一致,報錯了。
解決問題
雖然MySQL的UTF-8存在缺陷,但是MySQL(包括mariadb)官方卻沒有修復此bug,而是通過2010年重新發(fā)布的“utf8mb4”來支持真正的 UTF-8。因此想要解決此問題,只能夠將MySQL數據庫設置為utf8mb4字符集才行。
總結
這個問題,也是因為某次保存數據的時候保存了一個emoji表情才發(fā)現的。其實最早開始用MySQL的時候,就有發(fā)現一個utf8mb4了,但是自己卻沒有卻去了解UTF8和UTF8MB4的區(qū)別。通過此次教訓,以后使用MySQL就老老實實的設置字符集為utf8mb4吧。
好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關文章
windows環(huán)境中mysql忘記root密碼的解決方法詳解
本篇文章是對windows環(huán)境中mysql忘記root密碼的解決方法進行了詳細的分析介紹,需要的朋友參考下2013-06-06MySQL刪除外鍵、增加外鍵以及刪除主鍵、增加主鍵的實戰(zhàn)步驟
在Mysql中使用外鍵,可以有效地將多個表格的數據"聯動"起來,打破獨立狀態(tài),互相影響,下面這篇文章主要給大家介紹了關于MySQL刪除外鍵、增加外鍵以及刪除主鍵、增加主鍵的相關資料,需要的朋友可以參考下2022-08-08