真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

為何不要在MySQL中使用UTF-8編碼方式詳解

MySQL的UTF-8編碼方式

專注于為中小企業(yè)提供成都網(wǎng)站設計、網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)雙柏免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

MySQL 從 4.1 版本開始支持 UTF-8,也就是 2003 年,然而目前流行的UTF-8 標準(RFC 3629)是在此之后規(guī)定的。正因此,才造就了MySQL中的UTF-8與我們?nèi)粘i_發(fā)中的UTF-8不一致,從到導致了些問題。MySQL的UTF-8只支持每個字符最多三個字節(jié),而真正的 UTF-8 是每個字符最多四個字節(jié)。

問題復現(xiàn)

有數(shù)據(jù)庫表如下:utf8編碼方式

為何不要在MySQL中使用UTF-8編碼方式詳解

往數(shù)據(jù)庫存一條記錄:

@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字符集只支持三字節(jié)UTF-8編碼的Unicode范圍,而emoji字符屬于四字節(jié)編碼部分,所以程序運行預期是會報錯的。運行這段代碼:

為何不要在MySQL中使用UTF-8編碼方式詳解

與預期一致,報錯了。

解決問題

雖然MySQL的UTF-8存在缺陷,但是MySQL(包括mariadb)官方卻沒有修復此bug,而是通過2010年重新發(fā)布的“utf8mb4”來支持真正的 UTF-8。因此想要解決此問題,只能夠?qū)ySQL數(shù)據(jù)庫設置為utf8mb4字符集才行。

總結

這個問題,也是因為某次保存數(shù)據(jù)的時候保存了一個emoji表情才發(fā)現(xiàn)的。其實最早開始用MySQL的時候,就有發(fā)現(xiàn)一個utf8mb4了,但是自己卻沒有卻去了解UTF8和UTF8MB4的區(qū)別。通過此次教訓,以后使用MySQL就老老實實的設置字符集為utf8mb4吧。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對創(chuàng)新互聯(lián)的支持。


網(wǎng)站標題:為何不要在MySQL中使用UTF-8編碼方式詳解
文章鏈接:http://weahome.cn/article/giicoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部