mysql中utf-8和utf8mb4選擇使用

最近在研發(fā)過程中,發(fā)現(xiàn)前端傳遞的表情符號無法存入到mysql表中。查詢了下,發(fā)現(xiàn)mysql需要使用utf8mb4進(jìn)行編碼。

為了搞清楚其中的原因,特意找到了這篇文章?,F(xiàn)在將文章主要內(nèi)容記錄下來,有興趣的還是去看看原文。
核心:如果要支持unicode,那么記得使用utf8mb4,不要用utf8

UTF-8編碼

utf-8編碼采用可變的1到4個(gè)字節(jié)來進(jìn)行字符的編碼(U+00000 ~ U+10FFFF)。比如ASCII字符只用一個(gè)字節(jié)(8bit)來進(jìn)行表示,而漢字需要2到3個(gè)字節(jié)來表示。utf-8能夠表示1114112個(gè)字符(大概一百多萬個(gè)字符)

MySQL中的utf8字段

Mysql中的utf8只能存儲具有1到3個(gè)字節(jié)的unicode字符,對于需要4個(gè)字節(jié)編碼的unicode字符無法支持。比如將emoji表情(4個(gè)字節(jié))存入到utf8字段下,是會失敗的。同時(shí)原文中提到會有安全問題。

Mysql中的utf8mb4字段

MySQL5.5.3(2010年發(fā)布)中引入了一種新的編碼utf8mb4。能夠完全支持utf8編碼,既對于4字節(jié)的unicode字符也能完全存儲。

修改mysql數(shù)據(jù)庫編碼格式

mysql中可以分別指定數(shù)據(jù)庫,表以及表中字段的編碼格式。

修改數(shù)據(jù)庫編碼格式
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

注:COLLATE表示排序規(guī)則,集中常用的排序介紹

  1. utf8mb4_unicode_ci: 基于標(biāo)準(zhǔn)unicode進(jìn)行排序,在各種語言之間精確排序;
  2. utf8mb4_general_ci: 沒有實(shí)現(xiàn)unicode排序規(guī)則,遇到特殊語言或字符集,排序結(jié)果可能不一致;性能會更快一些
  3. utf8mb4_bin:區(qū)分大小寫。mysql中默認(rèn)不區(qū)分大小寫

然而平常開發(fā)過程中不要特別關(guān)注排序規(guī)則,但是要保證編碼格式和排序規(guī)則要統(tǒng)一。

總結(jié):使用utf8mb4,不要使用utf8

參考文章

  1. https://mathiasbynens.be/notes/mysql-utf8mb4
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容