MySQL中文乱码问题

2018-11-14  本文已影响659人  三斤耳朵

中文乱码问题在我们的mysql课程中常常出现,很多人在求助网络帮助的时候,往往达不到解决中文乱码的目的,我这里就我遇到过的一些问题进行汇总,并在以后不断的添加新的问题!

1、初窥门径

众所周知,出现中文乱码问题一定是由字符集编码问题引发的,但是很多时候我们都是对mysql配置文件my.ini中的如下代码做改动

 CLIENT SECTION
 ----------------------------------------------------------------------
 The following options will be read by MySQL client applications.
 Note that only client applications shipped by MySQL are guaranteed
 to read this section. If you want your own MySQL client program to
 honor these values, you need to specify it as an option during the
 MySQL client library initialization.
 [client]
 port=3306
 [mysql]
 default-character-set = utf8

将其中的default-character-set类型改变为gbk,大部分情况下问题就能够迎刃而解了。但是我们还需要进一步了解这些内容到底是在做什么?

2、折戟沉沙

如果上面的方式解决不了问题,就需要我们再进一步的完善修改方式了,这时候你就需要查看一下你的数据库编码:show variables like 'character%';
而上面解决不了的情况应该是如下数据库编码

数据库编码.PNG
我们发现全部都是utf8,为什么还会出现问题?
思考一下就知道,我们的控制台默认字符集编码是gbk啊,那顺着这个思路处理一下试试,就是要更改我们控制台的字符集编码,在线细查有如下办法:
C:\Users\Administrator>chcp 65001
然后,首先你看到的就是控制台变样子了,之后还要使用右键窗口,设置控制台属性如下图
控制台属性.PNG
选择我现在所选字体。
问题是,接下来就能解决问题了吗?
不能!接下来迎接你的是向数据库中插入中文后,数据库直接和你说ByeBye!是不是很惊愕,好了请改回gbk吧,此路不通,需要另寻它法!
怎么改回?C:\Users\Administrator>chcp 936

3、小试牛刀

现在先让我解释一下各个参数的意义
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
– character_set_system:系统元数据(字段名等)字符集
了解了其中的字符集的奥秘,我们就知道了,如果需要插入中文,应该修改客户端来源数据使用的字符集set character_set_client='gbk';
如果需要查询中文,应该查询结果字符集set character_set_results='gbk';
但是这种方式只能在当前的控制台起到效果,在今后会将根本解决问题的方法拿上来!

4、再进一步

mysql数据库修改字符编码
修改数据库字符集
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
如:ALTER TABLE student CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

修改表的默认字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
如:ALTER TABLE student DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

修改字段的字符集:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
如:ALTER TABLE student CHANGE name name VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci;

查看数据库编码:
SHOW CREATE DATABASE db_name;

查看表编码:
SHOW CREATE TABLE tbl_name;

查看字段编码:
SHOW FULL COLUMNS FROM tbl_name;

简述解决MySQL中中文乱码问题的基本思路及语句。
答:
1、首先查看MySQL系统中字符集编码类型
show variables like 'character%';
2、根据控制台默认字符集编码类型,修改MySQL系统中部分阶段字符集编码类型,包括client和results
set character_set_client='gbk';
set character_set_results='gbk';
除此以外应为支持中文字符集编码类型
3、之后确认数据库、数据表和字段的字符集编码类型
查看数据库编码:
SHOW CREATE DATABASE db_name;
查看数据表编码:
SHOW CREATE TABLE tbl_name;
查看字段编码:
SHOW FULL COLUMNS FROM tbl_name;
根据实际情况修改数据库、数据表和字段的字符集编码类型
修改数据库编码:
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
修改数据表编码:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
修改字段编码:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];

上一篇下一篇

猜你喜欢

热点阅读