彻底解决MySQL使用中文乱码的方法


Posted in MySQL onJanuary 22, 2022

mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。

1、中文乱码

1.1、中文乱码

create table user(name varchar(11));    # 创建user表
 insert into table user("carl");         # 添加数据
 select * from user;

彻底解决MySQL使用中文乱码的方法

insert into user value("哈哈");

无法插入中文字符:

彻底解决MySQL使用中文乱码的方法

1.2、查看表字符编码

mysql> show create table user \G;
*************************** 1. row ***************************
       Table: user
Create Table: CREATE TABLE `user` (
  `name` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

我们可以看到表的默认字符集是latin1.

所以我们在创建表的时候就需要指定表的字符集:

create table user(name varchar(11)) default charset=utf8;

这样在Linux里面可以访问并且可以插入与访问这个表了。

彻底解决MySQL使用中文乱码的方法

1.3、数据库与操作系统编码

虽然在服务器端可以显示中文正常,但是在客户端可能会显示乱码。因为我们的服务器是UTF8。

彻底解决MySQL使用中文乱码的方法

而且数据库的编码也存在问题。

彻底解决MySQL使用中文乱码的方法

这里我们可以看character_sert_database与character_set_server的字符集都是latin1.那么在mysql数据库中,server,database,table的字符集都默认是latin1.下面我们就来看看如何解决mysql乱码情况。

2、mysql设置变量的范围

2.1、session范围

查看数据库编码:

show variables like '%char%';

彻底解决MySQL使用中文乱码的方法

修改字符编码:

set character_set_server=utf8;
set character_set_database=utf8;
show variables like '%char%';

彻底解决MySQL使用中文乱码的方法

我们可以看到字符集已经修改成都是utf8了。但是这里有一个问题,那就是我们重新打开一个命令窗口然后查看数据编码就会出现下面的画面:

彻底解决MySQL使用中文乱码的方法

2.2、global范围

mysql设置变量的范围默认是session范围。如果设置多个会话的字符集那么需要设置global范围:Set [global|session] variables …

set global character_set_database=utf8;
set global character_set_server=utf8;
show variables like '%char%';

当我们跨会话查看mysql字符集都会看到都是utf8。如果你以为万事大吉了的话,那么你就大错特错了。

2.3、设置数据全局范围

当我们数据库重启的时候,你们发现设置global范围的值又变成latin1了。

service mysqld restart
mysql -uroot -pyourpassword
show variables like '%char%';

彻底解决MySQL使用中文乱码的方法

不要怕,下面就教你终极大招:

修改mysql配置文件/etc/my.cnf。

[mysqld]
character-set-server=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

请注意这几个参数配置的位置,不然可能会启动不起来mysql服务:

彻底解决MySQL使用中文乱码的方法

OK。这下如果你重启mysql服务也会发现它的字符集是utf8.

drop database test;
create database test;
use test;
create table user(name varchar(11));
show create table user \G;

彻底解决MySQL使用中文乱码的方法

而且我们创建表的时候不需要指定字符编码,它默认就是utf8;

彻底解决MySQL使用中文乱码的方法

3、总结

我看网上很多答案都是直接在session级别设置mysql的字符编码,这是治标不治本的方法。我们还是要从源头上解决这个问题。那就是修改mysql默认的配置文件,把它的字符集修改成能够使用中文字符的UTF8就OK了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

MySQL 相关文章推荐
MySQL锁机制
Apr 05 MySQL
MySQL 分页查询的优化技巧
May 12 MySQL
解析MySQL binlog
Jun 11 MySQL
SQL实现LeetCode(177.第N高薪水)
Aug 04 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
MySQL数据库⾼可⽤HA实现小结
Jan 22 MySQL
MySQL 开窗函数
Feb 15 MySQL
mysql 索引的数据结构为什么要采用B+树
Apr 26 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
Apr 29 MySQL
MySQL count(*)统计总数问题汇总
Sep 23 MySQL
mysql分组后合并显示一个字段的多条数据方式
Jan 22 #MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 #MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
MySQL创建定时任务
Jan 22 #MySQL
SQL基础查询和LINQ集成化查询
Jan 18 #MySQL
MySQL常见优化方案汇总
Jan 18 #MySQL
mysql sum(if())和count(if())的用法说明
You might like
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
可以在线执行PHP代码包装修正版
2008/03/15 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
Jquery下的26个实用小技巧(jQuery tips, tricks & solutions)
2010/03/01 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
python中np是做什么的
2020/07/21 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
网上商城创业计划书范文
2014/01/31 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
文明寝室申报材料
2014/05/12 职场文书
投标授权委托书范文
2014/08/02 职场文书
生活部的活动方案
2014/08/19 职场文书
城南旧事电影观后感
2015/06/16 职场文书
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs