MySQL----MySQL数据库插入中文报错或者乱码问题的解决办法

【原文链接】

一、原因分析

1.1 MySQL5.7版本的数据库和服务端编码默认设置为latin1编码

这个问题在8.0版本的数据库中已经解决了,5.7版本mysql默认的字符集不是utf8导致的
在5.7版本的数据库中执行如下命令

show variables like 'character_%';

如下,可以看到character_set_database 和 character_set_server 的字符集为latin1

而在8.0的数据库中,默认的已经将这个位置修改为utf8了,如下

1.2 MySQL5.7版本的数据库对应的字符串排序编码也设置为latin1编码

查看默认字符串排序的编码的命令

show variables like 'collation_%';

在5.7版本的数据库中结果如下

而在8.0版本的数据库中,此默认配置也已经修改了,如下

二、解决方法

2.1 数据库已经运行,业务要求数据库不能重启的情况下的解决办法

在有些时候,当发生问题的时候很多业务已经上线,数据库已经运行,业务要求数据库不能重启,此时就需要采用临时的解决办法,也就是通过mysql命令行设置,此时需要注意,在mysql中,mysql命令行设置的变量默认范围都是session会话级别的,要想在全局生效,需要加上global,如下:

set global character_set_database=utf8;
set global character_set_server=utf8;
set global collation_database=utf8_general_ci;
set global collation_server=utf8_general_ci;

然后退出当前数据库连接,重新连接登录,再次执行如下命令查看变量

show variables like 'character_%';
show variables like 'collation_%';

如下,此时都已经修改完成,此时再次去插入中文就不会报错了,当然这种解决办法只是一种临时解决办法,也就是数据库如果重启,那么还是会恢复到之前的默认配置,但是这种也能解决的一种场景就是当我们的数据库不允许重启的情况下,那么这种解决办法就很有效了

现在将MySQL重启一下,然后再查结果如下,可以发现确实又恢复了

2.2 彻底的解决办法

通过修改mysql的配置文件,一劳永逸的解决办法。这种解决办法需要重启数据库,因此如果数据库允许重启。那么还是建议使用这种方法解决

在windows上安装的数据库的配置文件名为my.ini,存放MySQL存放数据的目录下,这里比如如下。linux上配置文件名为 my.cnf,一般路径为 /etc/my.cnf

然后编辑my.ini文件,分别在mysql和mysqld下面加如下内容

[mysql]  # 在其下添加如下一行

default-character-set=utf8	#默认字符集

[mysqld] #在其下添加如下两行

character-set-server=utf8
collation-server=utf8_general_ci

如:

然后重启mysql服务即可,linux上通过如下命令重启mysql服务

systemctl restart mysqld

Windows通过【计算机】-右键-【管理】-【服务和应用程序】-【服务】,然后找到【MySQL5.7】,在上面右键-重新启动即可

重新启动后,再次查询编码,可以发现此时已经修改生效了

  • 1
    点赞
  • 9
    收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:岁月 设计师:pinMode 返回首页
评论 3

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值