摘要:自己的練習(xí)項(xiàng)目中涉及保存微信的,之前一直正常使用,但是突然遇到一個(gè)之前沒有遇到的問題。經(jīng)過調(diào)試發(fā)現(xiàn)錯(cuò)誤如下經(jīng)過仔細(xì)查看發(fā)現(xiàn)可以獲得的數(shù)據(jù),但是無法保存到數(shù)據(jù)庫,查看用戶的微信發(fā)現(xiàn)在中使用了字符。上查找發(fā)現(xiàn)主要解決方案就是的編碼設(shè)置由轉(zhuǎn)為。
自己的練習(xí)項(xiàng)目中涉及保存微信的nickname,之前一直正常使用,但是突然遇到一個(gè)之前沒有遇到的問題。經(jīng)過調(diào)試發(fā)現(xiàn)錯(cuò)誤如下: Incorrect string value: "xF0x9Fx99x88xF0x9F..." for column "nickname" at row 1 經(jīng)過仔細(xì)查看發(fā)現(xiàn)可以獲得nickname的數(shù)據(jù),但是無法保存到mysql數(shù)據(jù)庫,查看用戶的微信發(fā)現(xiàn)在nickname中使用了emoji字符。 到百度(只能用這個(gè),其他的麻煩呀。)上查找發(fā)現(xiàn)主要解決方案就是MySQL的編碼設(shè)置由utf8轉(zhuǎn)為utf8mb4。 具體解釋可見:[詳細(xì)emoji表情與utf8mb4的關(guān)系][1] ,寫的非常全面詳細(xì)。
網(wǎng)上的解決辦法大多是修改my.cnf參數(shù),設(shè)置mysql的編碼為utf8mb4,這種方法雖然徹底,但是通常要重啟mysql,會(huì)造成生產(chǎn)系統(tǒng)臨時(shí)當(dāng)機(jī)。我認(rèn)為寫的比較好的方法是:mysql/Java服務(wù)端對(duì)emoji的支持,一般可參考以上方法。文章中的關(guān)鍵點(diǎn)也說的比較清楚。
下面是我的處理方法:
要求:
1.MySQL的版本不能太低,低于5.5.3的版本不支持utf8mb4編碼。select version(); 2.JDBC驅(qū)動(dòng)版本不能太低,mysql connector版本高于5.1.13。3.將表中的對(duì)應(yīng)字段,比如會(huì)員表的呢稱字段,其字符集修改成utf8mb4。 4.最后修改druid數(shù)據(jù)源的配置,增加一行: mysql mysql-connector-java 5.1.38 5.檢查下jdbc連接串的設(shè)置: jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8 這里要注意:有人建議刪除useUnicode=true&characterEncoding=utf8,但好像我這里會(huì)發(fā)生保存數(shù)據(jù)時(shí)發(fā)生亂碼的現(xiàn)象。
本文重要參考:mysql : utf8mb4 的問題
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65614.html
摘要:題外話補(bǔ)充一點(diǎn)是一種字符編碼方法,它是由國(guó)際組織設(shè)計(jì),可以容納全世界所有語言文字的編碼方案。帶有的字符串截取在這類編程語言中一個(gè)中文字符的長(zhǎng)度為,但是對(duì)大部分的并非全部取長(zhǎng)度則是。 我在虎嗅上看過一篇關(guān)于Emoji的趣聞, 特別有意思, 在這里跟大家分享一下。里面提到了Emoji是怎么誕生的。 1999年前后,日本一個(gè)名叫栗田穰崇的年輕人,和許多直男一樣, 給女友發(fā)的短信經(jīng)常會(huì)被誤解。...
閱讀 2612·2021-09-26 10:13
閱讀 6078·2021-09-08 10:46
閱讀 710·2019-08-30 15:53
閱讀 2989·2019-08-29 16:13
閱讀 2785·2019-08-26 12:23
閱讀 3512·2019-08-26 11:24
閱讀 1127·2019-08-23 18:09
閱讀 1052·2019-08-23 17:08