国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

MySQL插入emoji表情失敗問(wèn)題的解決方法

2024-07-24 12:51:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

之前一直認(rèn)為UTF-8是萬(wàn)能的字符集問(wèn)題解決方案,直到最近遇到這個(gè)問(wèn)題。最近在做新浪微博的爬蟲(chóng), 在存庫(kù)的時(shí)候發(fā)現(xiàn)只要保持emoji表情,就回拋出以下異常:

Incorrect string value: '/xF0/x90/x8D/x83/xF0/x90...'

眾所周知UTF-8是3個(gè)字節(jié), 其中已經(jīng)包括我們?nèi)粘D芤?jiàn)過(guò)的絕大多數(shù)字體. 但3個(gè)字節(jié)遠(yuǎn)遠(yuǎn)不夠容納所有的文字, 所以便有了utf8mb4, utf8mb4是utf8的超集, 占4個(gè)字節(jié), 向下兼容utf8. 我們?nèi)粘S玫膃moji表情就是4個(gè)字節(jié)了.

所以在此我們像utf8的數(shù)據(jù)表插入數(shù)據(jù)就會(huì)報(bào)出Incorrect string value這個(gè)錯(cuò)誤.

Google一下很容易就找到了解決方案, 具體解決辦法是如下:

一、修改數(shù)據(jù)表的字符集為utf8mb4

這點(diǎn)很簡(jiǎn)單, 修改語(yǔ)句網(wǎng)上找一大堆, 不過(guò)建議重新建表, 使用 mysqldump -uusername -ppassword database_name table_name > table.sql 備份相應(yīng)數(shù)據(jù)表, 并修改其中的建表語(yǔ)句的字符集為 utf8mb4 即可, 然后 mysql -uusername -ppassword database_name < table.sql 重新導(dǎo)入sql即可完成修改字符集操作.

二、MySQL數(shù)據(jù)庫(kù)版本要5.5.3及以上

網(wǎng)絡(luò)上所有的文章都說(shuō)明要MySQL 5.5.3以上的版本才支持utf8mb4, 不過(guò)我使用的數(shù)據(jù)庫(kù)版本為5.5.18, 最終仍能解決問(wèn)題, 所以同學(xué)們不要急著找運(yùn)維哥哥升級(jí)數(shù)據(jù)庫(kù)先, 先試試能不能自己解決問(wèn)題.

三、修改數(shù)據(jù)庫(kù)配置文件/etc/my.cnf并重啟mysql服務(wù)

主要是修改數(shù)據(jù)庫(kù)的默認(rèn)字符集, 以及連接, 查詢的字符集, [Mysql支持emoji 表情符號(hào) 升級(jí)編碼為UTF8MB4][1] 這篇文章有詳細(xì)的設(shè)置方法, [深入Mysql字符集設(shè)置][2] 這篇文章有其中設(shè)置的各個(gè)字符集的作用, 大家可以科普下.

四、升級(jí)MySQL Connector到5.1.21及以上

以上所有的操作, 最關(guān)鍵的是步驟3, 修改數(shù)據(jù)庫(kù)的配置文件, 其中大概修改了

[client]# 客戶端來(lái)源數(shù)據(jù)的默認(rèn)字符集default-character-set = utf8mb4[mysqld]# 服務(wù)端默認(rèn)字符集character-set-server=utf8mb4# 連接層默認(rèn)字符集collation-server=utf8mb4_unicode_ci[mysql]# 數(shù)據(jù)庫(kù)默認(rèn)字符集default-character-set = utf8mb4

這些配置指定了數(shù)據(jù)從客戶端到服務(wù)端所經(jīng)過(guò)的一條條管道使用的字符集, 其中每一個(gè)管道出現(xiàn)問(wèn)題都可能會(huì)導(dǎo)致插入失敗或者亂碼.

但很多時(shí)候, 線上的數(shù)據(jù)庫(kù)是不能隨便修改數(shù)據(jù)庫(kù)文件的, 所以我們的運(yùn)維同學(xué)很果斷的回絕了我修改數(shù)據(jù)庫(kù)配置文件的請(qǐng)求(T_T)

所以就只能用代碼解決了, 一開(kāi)始是準(zhǔn)備從JDBC連接時(shí)候就指定使用的字符集處下手.

jdbc:mysql://localhost:3306/ding?characterEncoding=UTF-8
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴中市| 岢岚县| 泰顺县| 荆州市| 吴堡县| 广德县| 古丈县| 喀喇| 阜新| 象山县| 天峨县| 壶关县| 三明市| 上虞市| 三江| 米脂县| 盐津县| 鄢陵县| 景德镇市| 琼结县| 阳谷县| 友谊县| 沅江市| 垦利县| 郧西县| 桂林市| 呼和浩特市| 荣成市| 应城市| 新安县| 始兴县| 湘潭县| 天门市| 邳州市| 大丰市| 疏附县| 河北区| 陇南市| 绵竹市| 革吉县| 军事|