pymysql.err.InternalError Incorrect string value: '\\xF0\\x9F\\x91\\x87' for column 错误

向数据text字段写入时报错 : 

sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1366, "Incorrect string value: '\\xF0\\x9F\\x91\\x87</...' for column 'xmlContents' at row 8")

一般来说Mysql(小于5.5.3)字符集设置为utf8,指定连接的字符集也为utf8,但是,当字符串中有特殊字符(如emoji表情符号,以及其他凡是转成utf8要占用4字节的字符)就会有问题会报错 

大家都知道Unicode是一个标准,utf8是unicode一个实现方式, 某些Unicode字符转成utf8可能4字节,utf8最长只有3字节,遇到这个问题,有两种解决方式:

  1. 程序里转换一下如emoji Util之类的解决方式将特殊字符替换成"" 空字符串
  2. 1. 单独设置字符集 将库/表/字段都设置为utf8mb4
    2. 连接数据库也需要设置mysql_url = mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)s/%(database)s?charset=utf8mb4
修改库的字符集
语法:alter database 库名 default character set 字符集;
alter database shiyan default character set gbk;
修改表的字符集
语法:alter table 表名 convert to character set 字符集;
alter table test1 convert to character set utf8;
修改字段的字符集
语法:alter table 表名 modify 字段名 字段属性 character set gbk;
alter table test1 modify name char(10) character set gbk;
发布了160 篇原创文章 · 获赞 21 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_43064185/article/details/104502771