最近项目里需要往MySQL里插入emoj,把表的编码改成了utfbmb4之后发现,在mysql shell里面是可以插入emoj的,但是利用pymysql则无法插入emoj,报如下错误
1 | pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x98\\x85\\xF0\\x9F...' for column 'content' at row 1") |
现总结自己的解决方案如下
0x01 修改mysql默认编码
参照更改MySQL数据库的编码为utf8mb4一文将数据库默认编码修改为utf8mb4
特别记录自己的mysql重启命令
1 | # 关闭mysql |
其中/usr/local/mysql/
为mysql安装路径。
0x02 修改/usr/share/mysql/charsets/Index.xml
修改完mysql默认编码之后登入mysql,发现报如下错误
1 | mysql: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file |
参照Character set ‘utf8mb4’ is not a compiled character set解决
特别注意<charset name="utf8mb4">
要在<charset name="utf8">
之前
0x03 修改数据库,表,字段的编码
0x02之后已可以成功登入,但pymysql插入仍报之前的错,于是将数据库,表和相应字段的编码都改为utf8mb4,pymysql插入成功。
数据库,表和字段的编码修改方式如下:
1 | -- database |