解決mysql保存emoji表情報錯

本人使用的是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略好, 由於這個存儲二進制數據

相關文章
相關標籤/搜索