mysql 插入数据时,报"Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F…’ for column ‘question’ at row 1"
count = cs1.execute('insert into icon values(1,"榱题黮𪒡")')
数据库编码格式、表编码格式和字段编码格式一般设置是“utf-8”,对于汉字来说足够,mysql中utf8占3个字节,但是对于的复杂字体、特殊表情符号来说,三个字节是不够的,使用utf8就会出现‘\xF0\x9F\x8F\x80’的问题。需要使用四个字节来存储。
solution :
更改数据库的编码为utf8mb4: utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的复杂字体或表情字符。
# linux/ubuntu是mysqld.cnf, window配置文件为my.ini(有些mysql版本没有my.ini就自己创建它放在mysql根目录下)
vi /etc/mysql/mysql.conf.d/mysqld.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
#查看数据库编码更改前
show variables like 'char%';
#重启mysql
systemctl restart mysqld.service
or
service mysql restart
show variables like 'char%';
show create table icon;
# 生效后改表字段的编码
ALTER TABLE icon CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;