MySQL插入数据问题 Incorrect string value: ‘\\xF0\\x9F\\x96\\xA4\\xE7\\xAC...‘ for column ‘content‘

8 篇文章 1 订阅
4 篇文章 0 订阅

MySQL插入数据问题 Incorrect string value: '\\xF0\\x9F\\x96\\xA4\\xE7\\xAC...' for column 'content'

背景

向 MySQL 中插入数据时,出现如下错误:

"Incorrect string value: '\\xF0\\x9F\\x8C\\x9F\\xE4\\xBB...' for column 'content' at row 15"

原因:
MySQL 中数据字符集设置为“utf-8”,对于汉字来说足够;Mysql中 utf8 占3个字节,但是,3个字节对于表情符号是不够的,需4个字节;当插入字符串中有表情符号时,此时使用 utf8,会出现‘\xF0\x9F\x8D\x83\xF0\x9F’的问题。

解决方案一:修改 MySQL 表中编码

将 “utf-8” 编码修改为 “utf8mb4”
在这里插入图片描述

解决方案二:编程解决-Python代码(推荐)

替换掉文本中表情符号

import re
def get_clear_data(line):
    compile_emoji = re.compile('['
                               '\U0001F300-\U0001F5FF'  # 🌀 --> 🗿
                               '\U0001F900-\U0001F9FF'  # 🤀 --> 🧿
                               '\U0001F600-\U0001F64F'  # 😀 --> 🙏
                               '\U0001F680-\U0001F6FF'  # 🚀-\U0001f6ff
                               '\u2600-\u26FF'  # ☀ --> ⛿
                               '\u2700-\u27BF'  # ✀ --> ➿
                               '\u24C2'  # Ⓜ
                               '\U0001F1E6-\U0001F1FF'  # 🇦-🇿
                               '\U0001F170-\U0001F171'  # 🅰-🅱
                               '\U0001F17E-\U0001F17F'  # 🅾-🅿
                               '\U0001F18E'  # 🆎
                               '\U0001F191-\U0001F19A'  # 🆑-🆚
    
                               # '\u0023'  # #
                               # '\u002A'  # *
                               # '\u0030-\u0039'  # 0 --> 9
    
                               '\u2194-\u2199'  # ↔ --> ↙
                               '\u21A9-\u21AA'  # ↩ --> ↪
                               '\u2B05-\u2B07'  # ⬅ --> ⬇
                               '\u2B1B'  # ⬛
                               '\u2B1C'  # ⬜
                               '\u2B50'  # ⭐
                               '\u2B55'  # ⭕
                               '\u2934-\u2935'  # ⤴ --> ⤵
                               '\u3030'  # 〰
                               '\u303D'  # 〽
                               '\u3297'  # ㊗
                               '\u3299'  # ㊙
                               '\U0001F201-\U0001F202'  # 🈁 --> 🈂
                               '\U0001F21A'  # 🈚
                               '\U0001F22F'  # 🈯
                               '\U0001F232-\U0001F23A'  # 🈲 --> 🈺
                               '\U0001F250-\U0001F251'  # 🉐 --> 🉑
                               '\u203C'  # ‼
                               '\u2049'  # ⁉
                               '\u25AA'  # ▪
                               '\u25AB'  # ▫
                               '\u25B6'  # ▶
                               '\u25C0'  # ◀
                               '\u25FB-\u25FE'  # ◻ --> ◾
                               '\u00A9'  # ©
                               '\u00AE'  # ®
                               '\u2122'  # ™
                               '\u2139'  # ℹ
                               '\U0001F004'  # 🀄
                               '\U0001F0CF'  # 🃏
                               '\u231A'  # ⌚
                               '\u231B'  # ⌛
                               '\u2328'  # ⌨
                               '\u23CF'  # ⏏
                               '\u23E9-\u23F3'  # ⏩ --> ⏳
                               '\u23F8-\u23FA'  # ⏸-⏺
                               ']',
                               re.UNICODE)
    ret = compile_emoji.sub('', line)
    return ret

line = "决🌟大家"
print(get_clear_data(line))

输出:
决大家

解决方案三:使用第三方库 emoji

安装库: pip install emoji

def get_clear_data2(line):
    import emoji
    ret = emoji.demojize(line)
    return ret
line = "决🌟大家"
print(get_clear_data2(line))

输出:
决:glowing_star:大家

参考:
python Incorrect string value: ‘\xF0\x9F\xA6\x86\xF0\x9F…’ for column
pymysql.err.DataError: (1366, “Incorrect string value: ‘\xF0\x9F\x92\xA1 \xE4…‘ for column ‘d

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误的原因是数据库的字符集不支持存储一些特殊字符,比如Emoji表情或者某些特殊字符。在MySQL中,默认的字符集是utf8,它只支持存储3个字节的字符,而一些Emoji表情或者特殊字符占用了4个字节。因此,当尝试保存这些特殊字符时,就会出现错误。 解决这个问题的方法是将数据库的字符集修改为utf8mb4,它支持存储4个字节的字符。可以通过执行以下SQL语句修改字段编码格式: ``` ALTER TABLE <表名> MODIFY COLUMN <字段名> <类型> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 其中,<表名>是出错的表名,<字段名>是出错的字段名,<类型>是字段的类型。 通过执行这个SQL语句,就可以将字段的编码格式修改为utf8mb4,从而解决该错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL5.7插入数据报错Incorrect string value: ‘\xF0\x9F\x8F\xA1\xE5\x9C...‘ for column](https://blog.csdn.net/P_Doraemon/article/details/131624037)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Incorrect string value: '\xF0\x9F...' for column 'name' at row 1插入Mysql时报错-详细步骤](https://blog.csdn.net/deerplay/article/details/105181263)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值