人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

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

發(fā)布日期:2022-03-10 19:49 | 文章來(lái)源:源碼中國(guó)

MySQL的UTF-8編碼方式

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

問(wèn)題復(fù)現(xiàn)

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

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

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

這里只是部分代碼,看不懂沒(méi)關(guān)系,這里是給user表插入一條記錄。其中username是\uD83D\uDE00 。

其實(shí)\uD83D\uDE00是一個(gè)emoji表情。

因?yàn)镸ySQL中utf8字符集只支持三字節(jié)UTF-8編碼的Unicode范圍,而emoji字符屬于四字節(jié)編碼部分,所以程序運(yùn)行預(yù)期是會(huì)報(bào)錯(cuò)的。運(yùn)行這段代碼:

與預(yù)期一致,報(bào)錯(cuò)了。

解決問(wèn)題

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

總結(jié)

這個(gè)問(wèn)題,也是因?yàn)槟炒伪4鏀?shù)據(jù)的時(shí)候保存了一個(gè)emoji表情才發(fā)現(xiàn)的。其實(shí)最早開(kāi)始用MySQL的時(shí)候,就有發(fā)現(xiàn)一個(gè)utf8mb4了,但是自己卻沒(méi)有卻去了解UTF8和UTF8MB4的區(qū)別。通過(guò)此次教訓(xùn),以后使用MySQL就老老實(shí)實(shí)的設(shè)置字符集為utf8mb4吧。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)本站的支持。

海外服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部