Mysql字符集utf8和utf8mb4詳解
背景
1、MySQL在5.5.3版本之后增加了utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來兼容四字節(jié)的unicode;
2、utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉(zhuǎn)換。當然,為了節(jié)省空間,一般情況下使用utf8也就夠了;
名詞解釋
- 字符集(character set/charset):字符的二進制編碼方式;
- UTF-8:是unicode的實現(xiàn)方式之一,其他實現(xiàn)方式還有utf-16,utf-32,它是一種變長的編碼,一個符號使用1~4個字節(jié)表示;
- utf8:mysql中實現(xiàn)了utf-8編碼的unicode字符集,是utf8mb3的別稱,utf8編碼中一個符號使用1~3個字節(jié)表示;
- utf8mb4:mysql中實現(xiàn)了
關(guān)系
- 1、都實現(xiàn)了utf-8編碼中的的unicode字符集;
- 2、utf8僅支持基本多語言平面Basic Multilingual Plane (BMP);
- 3、utf8mb4支持BMP之外的補充字符,如一些生僻的漢字,emoji字符,以及任何新增的unicode字符。
- 4、utf8一個字符最多使用3個字節(jié)存儲,utf8mb4一個字符最多使用4個字節(jié)存儲;
- 5、對于BPM字符,utf8和utf8mb4都使用三個字節(jié)存儲;對于非BMP字符,utf8mb4使用4個字節(jié)存儲,utf8不能存儲非BMP字符;
- 6、InnoDB中默認最大可對767個字節(jié)建立索引;使用utf8的列最多可對255個字符建立索引;使用utf8mb4的最多可對191個字符建立索引;
實踐
為了驗證上面的理論,創(chuàng)建如下兩個表:它們的字符集分別為utf8和utf8mb4
CREATE TABLE `test_utf8` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵', `name` varchar(5) NOT NULL COMMENT '名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='測試utf8'; CREATE TABLE `test_utf8mb4` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵', `name` varchar(5) NOT NULL COMMENT '名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='測試utf8mb4';
向兩個表中分別插入如下數(shù)據(jù):
insert into test_utf8(name) values ('我是一顆小'), ('我是reo'), ('12345'), ('ggvdc'); insert into test_utf8mb4(name) values ('我是一顆小'), ('我是reo'), ('12345'), ('ggvdc'); insert into test_utf8mb4(name) values ('?????');
查看在兩種字符集下的存儲長度:
該圖驗證了上面3、4、5點理論;
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何通過Mysql的二進制日志恢復(fù)數(shù)據(jù)庫數(shù)據(jù)
本篇文章主要介紹了詳解如何通過Mysql的二進制日志恢復(fù)數(shù)據(jù)庫數(shù)據(jù),具有一定的參考價值,有興趣的可以了解一下。2017-04-04MySQL?SQL性能分析之慢查詢?nèi)罩?、explain使用詳解
這篇文章主要介紹了MySQL?SQL性能分析?慢查詢?nèi)罩尽xplain使用,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04mysql中取系統(tǒng)當前時間,當前日期方便查詢判定的代碼
今天在寫一段查詢語句的時候,需要判定結(jié)束日期是不是大于當前日期,一般情況下都是通過php判定日期,然后查詢。2011-12-12