MySQL数据库使用插入数据时报错,看起来是编码问题,好吧,实际上就是编码问题。
1. 先查看数据库的两类相关编码方式:
SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8|
| character_set_connection | utf8|
| character_set_database | latin1 |
| character_set_results | utf8|
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /home/jh/mysql/share/mysql/charsets
SHOW VARIABLES LIKE 'collation_%';
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
2. 修改对应的编码方式
SET character_set_database =utf8;
SET character_set_results =utf8;
SET character_set_server =utf8;
SET character_set_system =utf8; /*此处utf-8也可以*/
SET collation_server = utf8_general_ci;
SET collation_database = utf8_general_ci;
3. 检查mysql下每个数据库,表,字段是否都是utf8,不然还是会报错,然后重启Mysql。
可参考文章:MySQL 中查看与设置数据库、数据表、表字段的编码格式
注:还有一种硬核解决办法,先改数据库的编码方式,然后删表重建,这样就不用逐个检查表的编码方式了,可参考文章:MySQL如何删除数据库中所有的表、表中的所有数据 。删库有风险,慎用!
参考文章:【1】解决Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci错误-云栖社区-阿里云
【2】mysql 如何删除数据库中所有的表 - James老赵 - 博客园
【3】MySQL 中查看与设置数据库、数据表、表字段的编码格式,简洁清晰~ - 小异常的博客 - CSDN博客