本人使用的是mysql數據庫,引擎默認使用的是InnoDB(其實跟引擎不要緊).字符集爲utf8mysql
當保存emjoy表情的時候就報錯了,很難受.爲何會這樣呢linux
百度一下網上的資料,最後sql
總結
早期的mysql版本將utf8編碼設置爲1~3個字節,而emoji表情是4個字節,存到utf8編碼的字段裏固然報異常了.數據庫
爲此mysql後續增長utf8mb4編碼.完美的兼容了emoji表情的保存vim
Linux設置mysql字符編碼
本人的linux系統爲centos7.4.過程以下centos
1. 進入文件編輯 vim /etc/my.cnf性能
2.在[mysqld]添加編碼
character-set-server=utf8mb4centos7
3.重啓服務service mysql restartspa
4.mysql -u root -p 進入mysql
5.查看mysql字符集
mysql>SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
OK,完美解決
參考文獻:http://www.javashuo.com/article/p-qpoeisjr-bx.html
下面這麼設置更爲完全
[client]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = false
character-set-server = utf8mb4
init_connect='SET NAMES utf8mb4'
[mysql]
default-character-set = utf8mb4
MySQL混合utf8 utf8mb4是否比純utf8mb4更具優點?
其實都差很少.utf8mb4其實就是標準的utf8.他能夠實現存儲4個字節的emjoy表情而utf8不行
另外須要注意的一點就是utf8mb4的表字段最好不要用char固定字符.由於N個char字符所佔用的空間是N*4字節.建議改用可變長度的varchar進行存儲.效率方面稍好(增長額外的1-2字節記錄其字段大小)
而純英文字符的字段(例如密碼等).能夠用varbinary(可變長度binary)和binary列(適用於固定長度的英文字符, 例如密碼哈希)類型.性能比varchar略好, 由於這個存儲二進制數據