测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
MySQL----MySQL数据库插入中文报错或者乱码问题的解决办法
收藏本文
作者:redrose2100 类别: 日期:2022-05-29 03:12:35 阅读:1007 次 消耗积分:0 分
[TOC] ## 一、原因分析 ### 1.1 MySQL5.7版本的数据库和服务端编码默认设置为latin1编码 这个问题在8.0版本的数据库中已经解决了,5.7版本mysql默认的字符集不是utf8导致的 在5.7版本的数据库中执行如下命令 ```bash show variables like 'character_%'; ``` 如下,可以看到character_set_database 和 character_set_server 的字符集为latin1 ![](http://blog.redrose2100.com/static/upload/20220529_022516.png) 而在8.0的数据库中,默认的已经将这个位置修改为utf8了,如下 ![](http://blog.redrose2100.com/static/upload/20220529_022641.png) ### 1.2 MySQL5.7版本的数据库对应的字符串排序编码也设置为latin1编码 查看默认字符串排序的编码的命令 ```bash show variables like 'collation_%'; ``` 在5.7版本的数据库中结果如下 ![](http://blog.redrose2100.com/static/upload/20220529_023026.png) 而在8.0版本的数据库中,此默认配置也已经修改了,如下 ![](http://blog.redrose2100.com/static/upload/20220529_023128.png) ## 二、解决方法 ### 2.1 数据库已经运行,业务要求数据库不能重启的情况下的解决办法 在有些时候,当发生问题的时候很多业务已经上线,数据库已经运行,业务要求数据库不能重启,此时就需要采用临时的解决办法,也就是通过mysql命令行设置,此时需要注意,在mysql中,mysql命令行设置的变量默认范围都是session会话级别的,要想在全局生效,需要加上global,如下: ```bash 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; ``` 然后退出当前数据库连接,重新连接登录,再次执行如下命令查看变量 ```bash show variables like 'character_%'; show variables like 'collation_%'; ``` 如下,此时都已经修改完成,此时再次去插入中文就不会报错了,当然这种解决办法只是一种临时解决办法,也就是数据库如果重启,那么还是会恢复到之前的默认配置,但是这种也能解决的一种场景就是当我们的数据库不允许重启的情况下,那么这种解决办法就很有效了 ![](http://blog.redrose2100.com/static/upload/20220529_024318.png) 现在将MySQL重启一下,然后再查结果如下,可以发现确实又恢复了 ![](http://blog.redrose2100.com/static/upload/20220529_031010.png) ### 2.2 彻底的解决办法 通过修改mysql的配置文件,一劳永逸的解决办法。这种解决办法需要重启数据库,因此如果数据库允许重启。那么还是建议使用这种方法解决 在windows上安装的数据库的配置文件名为my.ini,存放MySQL存放数据的目录下,这里比如如下。linux上配置文件名为 my.cnf,一般路径为 /etc/my.cnf ![](http://blog.redrose2100.com/static/upload/20220529_025633.png) 然后编辑my.ini文件,分别在mysql和mysqld下面加如下内容 ```bash [mysql] # 在其下添加如下一行 default-character-set=utf8 #默认字符集 [mysqld] #在其下添加如下两行 character-set-server=utf8 collation-server=utf8_general_ci ``` 如: ![](http://blog.redrose2100.com/static/upload/20220529_030117.png) 然后重启mysql服务即可,linux上通过如下命令重启mysql服务 ```bash systemctl restart mysqld ``` Windows通过【计算机】-右键-【管理】-【服务和应用程序】-【服务】,然后找到【MySQL5.7】,在上面右键-重新启动即可 ![](http://blog.redrose2100.com/static/upload/20220529_030724.png) 重新启动后,再次查询编码,可以发现此时已经修改生效了 ![](http://blog.redrose2100.com/static/upload/20220529_031149.png)
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/312
上一篇:
MySQL----MySQL数据库数据表增删改查命令行基础操作初体验
下一篇:
MySQL----MySQL数据库忘记root用户登录密码的解决办法
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件