什么是emoji
emoji在誕生之初有多種標準愿待,所以早期兼容性是個問題浩螺。但是現(xiàn)在已經(jīng)標準化了,是unicode的一部分仍侥∫觯可以認為,跟字母农渊、漢字一樣患蹂,emoji就是unicode中一個普通的字符
但是emoji通過utf-8編碼后,每個字符占4個字節(jié)腿时,屬于寬字符况脆。而老版本的mysql只支持一個字符占3個字節(jié),所以老版本的mysql是無法存儲emoji的批糟。新版本的mysql增加了字符集utf8mb4格了,可以支持單字符最多占4個字節(jié)。utf8mb4是utf8的超集徽鼎,可以無需修改地支持原來的utf8字符
要讓mysql存儲emoji盛末,需要滿足2個條件:
1、mysql的charset設(shè)置為utf8mb4
2否淤、客戶端連接mysql的驅(qū)動悄但,也需要設(shè)置為utf8mb4
mysql設(shè)置charset為utf8mb4
1、需要設(shè)置數(shù)據(jù)庫實例的character_set_server參數(shù)為UTF8mb4
2石抡、設(shè)置數(shù)據(jù)庫字符集為utf8mb4
3檐嚣、設(shè)置表的字符集為UTF8mb4
4、如果不設(shè)置表的字符集為UTF8mb4啰扛,也可以設(shè)置單獨某個列的字符集為UTF8mb4
對于新開發(fā)的應(yīng)用柱衔,建議都把數(shù)據(jù)庫的字符集設(shè)置為UTF8mb4胃榕,以免后期遷移的麻煩
客戶端連接mysql驅(qū)動
以node.js為例,需要設(shè)置charset參數(shù)為UTF8MB4_GENERAL_CI,全大寫
其他平臺如java脆炎,php聚霜,也需要做類似的配置
至于最終呈現(xiàn)的地方效五,包括html頁面噩茄、iOS客戶端,經(jīng)實驗發(fā)現(xiàn)续徽,不需要特殊的設(shè)置蚓曼,自然可以輸入和展示emoji字符
不支持emoji的客戶端
有些客戶端不支持emoji,或者支持得不充分炸宵。我實驗了一下:
navicat for mysql完全無法正確展示已經(jīng)入庫的emoji字符
webstorm也無法完全正確展示辟躏,部分emoji字符被截斷而展示不全
CocoaRestClient可以完美展示,借助復(fù)制粘貼土全,也可以輸入emoji字符
mac上搜到mysql
1. terminal輸入 which mysql
2. 找到mysql位置?/Applications/XAMPP/bin/mysql
3. 找my.cnf位置
輸入? mysql --help or mysql --help | grep my.cnf
得到 /Applications/XAMPP/xamppfiles/etc/my.cnf ~/.my.cnf?
4. 修改my.cnf的內(nèi)容
找到后請在以下三部分里添加如下內(nèi)容nano修改:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
5. 重啟mysql
6. 核對輸入?
a.)輸入命令:mysql捎琐,進入mysql命令行(如果提示沒權(quán)限会涎,可以嘗試輸入mysql -uroot -p你的密碼)
b.)在mysql命令行中輸入:SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
檢查是否如下:
+--------------------------+--------------------+
| Variable_name? ? ? ? ? ? | Value? ? ? ? ? ? ? |
+--------------------------+--------------------+
| character_set_client? ? | utf8mb4? ? ? ? ? ? |
| character_set_connection | utf8mb4? ? ? ? ? ? |
| character_set_database? | utf8mb4? ? ? ? ? ? |
| character_set_filesystem | binary? ? ? ? ? ? |
| character_set_results? ? | utf8mb4? ? ? ? ? ? |
| character_set_server? ? | utf8mb4? ? ? ? ? ? |
| character_set_system? ? | utf8? ? ? ? ? ? ? |
| collation_connection? ? | utf8mb4_unicode_ci |
| collation_database? ? ? | utf8mb4_unicode_ci |
| collation_server? ? ? ? | utf8mb4_unicode_ci |
+--------------------------+--------------------+
rows in set (0.00 sec)
然后進入mysql客戶端修改具體的數(shù)據(jù)庫和表格!瑞凑!
ALTER DATABASE _htsha CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE `_goods` CONVERT TO? ? ? ? ? ? ? ? ? ? ? ? CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; #將TABLE_NAME替換成你的表名
ALTER TABLE `_supplier` CONVERT TO? ? ? ? ? ? ? ? ? ? ? ? CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; #將TABLE_NAME替換成你的表名
ALTER TABLE `_comment` CONVERT TO? ? ? ? ? ? ? ? ? ? ? ? CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; #將TABLE_NAME替換成你的表名
#ALTER TABLE table_name modify name text charset utf8mb4;
ALTER TABLE `_goods` MODIFY COLUMN `goods_brief` varchar(255)? CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `_goods` MODIFY COLUMN `goods_brief` varchar(2550);
ALTER TABLE `_goods` MODIFY COLUMN? `goods_desc` TEXT? CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `_supplier` MODIFY COLUMN? `name` varchar(256)? CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `_comment` MODIFY COLUMN? `comment` varchar(6550)? CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
#SHOW VARIABLES WHERE Variable_name LIKE "character_set_%" OR Variable_name LIKE 'collation%'