日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

10分鐘完成MySQL對emoji的支持

 

公司有新要求,IOS客戶端要上線評論中可以使用emoji表情的功能,在MySQL 5.5 之前,UTF-8編碼只支持1-3個字節(jié);從MySQL 5.5開始,可以支持4個字節(jié)UTF編碼 utf8mb4 ,一個字符能夠支持更多的字符集,也能夠支持更多表情符號。

utf8mb4兼容utf8,且比utf8能表示更多的字符,是utf8字符集的超集。所以現(xiàn)在一些新的業(yè)務(wù),比如IOS中的emoji表情,會將MySQL數(shù)據(jù)庫的字符集設(shè)置為utf8mb4。

先看問題:

Caused by: JAVA.sql.SQLException: Incorrect string value: '\xF6\x9D\x98\x84' for column 'comment' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)

如果我們將列comment設(shè)置為varchar(100),用于存儲評論信息,現(xiàn)在上線新功能存儲emoji表情,插入emoji表情就會報出上述錯誤,UTF-8編碼有可能是兩個、三個、四個字節(jié)。Emoji表情是4個字節(jié),而Mysql的utf8編碼最多3個字節(jié),所以數(shù)據(jù)插不進(jìn)去。utf8mb4兼容utf8,且比utf8能表示更多的字符。


解決方案:將Mysql的編碼從utf8轉(zhuǎn)換成utf8mb4。

網(wǎng)上的文章各執(zhí)一詞,本文就生產(chǎn)環(huán)境中真實可用的參數(shù)進(jìn)行記錄

整體操作流程其實并不難

一:首先我們修改my.cnf參數(shù)

[client]
default-character-set=utf8mb4
  
  
[mysql]
default-character-set=utf8mb4
  
  
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
character-set-client-handshake = false

二:對數(shù)據(jù)庫相關(guān)的表進(jìn)行字符集修改

將數(shù)據(jù)庫轉(zhuǎn)換為utf8mb4

mysql> ALTER DATABASE erp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

將已經(jīng)建好的表也轉(zhuǎn)換成utf8mb4

mysql>ALTER TABLE `erp_comment` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

將需要使用emoji的字段設(shè)置類型為:

mysql>ALTER TABLE `erp_comment` MODIFY COLUMN `comment`  varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

三:重啟數(shù)據(jù)庫服務(wù)器使之生效

[root@HE3 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL.... SUCCESS!

四:登錄數(shù)據(jù)庫檢查是否如下:

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character%' 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)

特別說明下:collation_connection/collation_database/collation_server如果是utf8mb4_general_ci,沒有關(guān)系。但必須保證character_set_client/character_set_connection/character_set_database/character_set_results/character_set_server為utf8mb4。

五:讓開發(fā)那邊的pom配置中,去掉characterEncoding參數(shù),并重新編譯一下

如果你用的是java服務(wù)器,升級或確保你的mysql connector版本高于5.1.13,否則仍然無法使用utf8mb4

最后再讓前端應(yīng)用插入emoji表情,就可以了。

一些小知識點:

其中character-set-server 和 collation-server 這些設(shè)置為utf8mb4字符集是比較容易理解的,就是將MySQL數(shù)據(jù)庫相關(guān)的字符集都設(shè)置為utf8mb4;

但為了實現(xiàn)客戶端utf8連接到MySQL后,使用的也是utf8mb4字符集,就在 mysqld配置中配置了 init_connect='SET NAMES utf8mb4' 表示初始化連接都設(shè)置為utf8mb4字符集,再配置一個 skip-character-set-client-handshake = true 忽略客戶端字符集設(shè)置,不論客戶端是何種字符集,都按照init_connect中的設(shè)置進(jìn)行使用,這樣就滿足了應(yīng)用的需求。

分享到:
標(biāo)簽:emoji
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定