教你如何讓數據庫支持emoji表情符存儲

1、教你如何讓數據庫支持emoji表情符存儲

解決方式:html

更換字符集utf8-->utf8mb4java

問題描述:mysql

前臺應用抓取微博信息,天天總有幾條數據插入不成功。應用日誌顯示:  git

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xAA",...' for column 'raw_json' at row 1, 異常:org.springframework.jdbc.UncategorizedSQLException:  github

其中raw_json字段顯示以下:spring

  由上圖可知,插入的字段裏面包含emoji表情符。基本能夠斷定是字符編碼的問題。咱們的數據庫裏面使用的是utf8編碼,普通的字符串或者表情都是佔位3個字節,因此utf8足夠用了,可是移動端的表情符號佔位是4個字節,普通的utf8就不夠用了,爲了應對無線互聯網的機遇和挑戰、避免 emoji 表情符號帶來的問題、涉及無線相關的 MySQL 數據庫建議都提早採用utf8mb4 字符集,這必需要做爲移動互聯網行業的一個技術選型的要點。sql

utf8與utf8mb4說明:  數據庫

UTF- 8:Unicode Transformation Format-8bit,容許含BOM,但一般不含BOM。是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24爲(三個字節)來編碼。UTF-8包含全世界全部國家須要用到的字符,是國際編碼,通用性強。UTF-8編碼的文字能夠在各國支持UTF8字符集的瀏覽器上顯示。若是是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。  json

UTF8MB4:MySQL在5.5.3以後增長了utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來兼容四字節的unicode。   瀏覽器

 

既然找到了緣由就來執行吧.既然只有raw_json列含表情符,就先嚐試修改此列的字符集:  

ALTER TABLE xx_pnl_weibo_usershow  
MODIFY ` raw_json` varchar(3000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

改完後測試,插入失敗。  

嘗試修改表的字符集:  

alter table xx_pnl_weibo_usershow CHARSET=utf8mb4 ;  (修改表的默認字符集)
alter table xx_pnl_weibo_usershow CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;(修改表和字段的字符集)

改完後測試,插入失敗。  

修改庫級別的字符集 

vi /etc/my.cnf  

[client]   
default-character-set=utf8mb4   
[mysqld]   
character-set-server = utf8mb4  
 
service mysqld restart 

 改完後測試,插入成功。查看插入的數據:  

root@localhost zx_prod >select id,raw_json,hex(raw_json),length(raw_json) from  xx_pnl_weibo_usershow where id=2;

+----+------------------+----------------------------------+---------------------+
| id | raw_json | hex(raw_json) | length(raw_json) |
+----+------------------+----------------------------------+---------------------+
| 2 |  | F09F9894F09F9882F09F9898F09F9894 | 16 |
+----+------------------+----------------------------------+---------------------+
1 row in set (0.00 sec)

 

 由於是線上生產業務,須要先在測試環境作好測試工做。避免業務高峯期,線上申請停機窗口操做。

 

emoji表情編碼參考: 

  http://punchdrunker.github.io/iOSEmoji/table_html/flower.html

相關文章
相關標籤/搜索