日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0......

發(fā)布時(shí)間:2025/4/5 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原文:【原創(chuàng)】通俗易懂地解決中文亂碼問題(2) --- 分析解決Mysql插入移動(dòng)端表情符報(bào)錯(cuò) ‘incorrect string value: '\xF0...

這篇blog重點(diǎn)在解決問題,如果你對(duì)字符編碼并不是特別了解,建議先看看 【原創(chuàng)】通俗易懂地解決中文亂碼問題(1) --- 跨平臺(tái)亂碼

當(dāng)然,如果只是針對(duì)解決這個(gè)Mysql插入報(bào)錯(cuò)問題,本篇足夠了。

?

一、定位錯(cuò)誤

?

定位錯(cuò)誤絕對(duì)是至關(guān)重要的一環(huán)。我建議遇到問題耐心分析一下比較好,畢竟“不是所有的牛奶都叫特侖蘇”。

引起同一個(gè)問題的可能有很多,別人的解決方案也許并不適合自己。

那先看看問題出現(xiàn)在哪了,報(bào)錯(cuò)如下:

發(fā)現(xiàn)的確是編碼錯(cuò)誤, 16進(jìn)制的錯(cuò)誤提示(\xF0\x9F\x94\xA5\xE5\x8C...)雖然說的比較清楚了但是看看這個(gè)字段值是什么也無妨。

看看此時(shí)‘event_title’是什么鬼東西,如下:

原來是有一個(gè)特殊字符'?‘。這個(gè)字符的來源是移動(dòng)端,現(xiàn)在大家聊天不加個(gè)表情賣萌還能不能做朋友了?所以移動(dòng)端大量的新興字符確實(shí)對(duì)數(shù)據(jù)庫有了更改的要求。

?

那么再一探究竟,看看這個(gè)字符的二進(jìn)制是什么?如下(第一行):

到這我們基本可以定位這個(gè)問題的原因了

1、這個(gè)字符占用三個(gè)字節(jié)。

2、根據(jù)上一篇對(duì)UTF-8編碼方式的介紹,我們知道對(duì)于UTF-8三個(gè)字節(jié)的編碼,其格式是 1110xxxx(E0-EF) 10yyyyyy 10zzzzzz。但是這個(gè)特殊字符低8位竟然是1111,顯然不符合utf-8編碼規(guī)則,所以mysql不支持寫入。(其實(shí)這和最開始的錯(cuò)誤提示是一致的)

?

二、解決問題

?

問題定位了那么就該想辦法解決了,目前無非兩條路可選。

1、哎您厲害我怕了還不成嗎,所以煩勞您別入庫了。因此對(duì)應(yīng)的解決辦法就是入庫前把錯(cuò)亂字符刪除。

2、擦老子武功天下第一,必須見一對(duì)拆一對(duì)。因此對(duì)于的辦法就是找找看哪個(gè)Mysql的版本能支持了,更新下Mysql的版本。

生活可以任性,但是選擇還是需要認(rèn)真的。所以根據(jù)自己實(shí)際情況進(jìn)行選擇。但一般選擇2的比較少,更新數(shù)據(jù)庫版本的確是個(gè)牽扯比較多的問題。

?

解決辦法:

對(duì)于1解決辦法太多了,見仁見智了。我選擇用正則表達(dá)式來處理這個(gè)問題,因?yàn)楫吘挂膊粌H僅是這一個(gè)字符。

針對(duì)我自己的情況我使用的是 "[^,。!《》]&\\pP|\\pZ|\\pS" 這個(gè)規(guī)則匹配。

?

對(duì)于2,我查了下資料發(fā)現(xiàn)Mysql 5.6及以上版本擴(kuò)大了UTF-8的支持力度,并且添加了utf8mb4設(shè)置項(xiàng)在相應(yīng)字段上(感謝幻元素的提醒,擔(dān)心誤導(dǎo)其他人),不過通過我的實(shí)驗(yàn)并沒有解決這個(gè)問題

也許需要在相應(yīng)字段加上 utf8_general_ci 這項(xiàng)設(shè)置。不過這項(xiàng)設(shè)置我沒有進(jìn)行測試,如果大家發(fā)現(xiàn)Mysql哪個(gè)版本和配置能解決這個(gè)問題了煩勞留個(gè)言哇~

文章最后有這個(gè)選項(xiàng)(utf8_general_ci)的一點(diǎn)說明。

?

?

附:utf8_unicode_ci和utf8_general_ci區(qū)別(引自wiki)

在數(shù)據(jù)庫系統(tǒng)MySQL中 有多種字符集,其中utf8_unicode_ci和utf8_general_ci是最常用的,但是utf8_general_ci對(duì)某些語言的支持有一些小問題,如果可以接受,那最好使用utf8_general_ci,因?yàn)樗俣瓤臁7駝t,請(qǐng)使用較為精確的utf8_unicode_ci,不過速度 會(huì)慢一些。

?

轉(zhuǎn)載請(qǐng)注明出處,謝謝~?? http://www.cnblogs.com/xiaoboCSer/p/4175861.html

?

總結(jié)

以上是生活随笔為你收集整理的通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0......的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。