从Facebook Marketing API插入数据时遭遇Incorrect string value错误求助
解决MySQL插入含特殊Unicode字符时的1366数据错误
你遇到的1366 Incorrect string value错误,原因是待插入的fp_name字段里包含了4字节的Unicode字符(比如截图里的粗体特殊字母,对应错误里的\xF0\x9D\x97\x96这类编码),而MySQL默认的utf8字符集仅支持最多3字节的Unicode字符,无法存储这类字符。以下是几种可行的解决方法:
方法1:修改数据库/字段的字符集为utf8mb4
这是最根本的解决方案,utf8mb4是MySQL对UTF-8的完整实现,支持所有Unicode字符(包括4字节的表情、特殊符号等)。
- 修改单个字段的字符集:
ALTER TABLE 你的表名 MODIFY COLUMN fp_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 如果需要统一整个表的字符集:
注意:操作前建议备份数据,避免意外。ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
方法2:确保数据库连接使用utf8mb4编码
用pymysql连接数据库时,必须显式指定charset='utf8mb4',否则即使数据库设置正确,连接传输时也会出现编码不匹配:
import pymysql conn = pymysql.connect( host='你的数据库地址', user='用户名', password='密码', db='数据库名', charset='utf8mb4' )
方法3:过滤或转义特殊字符(可选)
如果暂时无法修改数据库设置,可以预处理字符串,过滤掉4字节Unicode字符(会丢失特殊字符,适合不需要保留这些内容的场景):
import re def clean_special_chars(s): # 移除所有4字节的Unicode字符 return re.sub(r'[\U00010000-\U0010ffff]', '', s) # 插入前处理fp_name cleaned_name = clean_special_chars(原始的fp_name值)
内容的提问来源于stack exchange,提问作者Hikm Nasir
相关产品推荐
相关产品推荐

