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

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

  • 背景
  • 解决方案一:修改 MySQL 表中编码
  • 解决方案二:编程解决-Python代码(推荐)
  • 解决方案三:使用第三方库 emoji

背景

向 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”
MySQL插入数据问题 Incorrect string value: ‘\\xF0\\x9F\\x96\\xA4\\xE7\\xAC...‘ for column ‘content‘_第1张图片

解决方案二:编程解决-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

你可能感兴趣的:(MySQL,Python,Bug,mysql,编码,incorrect,str,python,for,column)