文档章节

MySQL中UTF8编码的数据在cmd下乱码

摆渡者
 摆渡者
发布于 2015/11/12 10:32
字数 922
阅读 1435
收藏 3

花了一下午,解决MySQL在Windows的cmd下中文乱码的问题。

mysql> use abc;
Database changed
mysql> select * from school;
+----------+--------------------+-------------------------------------------+
| schoolid | name               | address                                   |
+----------+--------------------+-------------------------------------------+
|        1 | 鍖椾含澶у          | 鍖椾含甯備腑鍏虫潙鍖楀ぇ琛?7鍙?
|        2 | 娓呭崕澶у          | 鍖椾含甯傛捣娣€鍖轰腑鍏虫潙澶ц
|        3 | 鍗椾含澶у          | 姹熻嫃鐪佸崡浜競榧撴ゼ鍖烘眽鍙h矾22鍙?
|        4 | 涓浗浜烘皯澶у     | 鍖椾含甯傛捣娣€鍖轰腑鍏虫潙澶ц59鍙?
|        5 | 鍘﹂棬澶у          | 绂忓缓鐪佸帵闂ㄥ競鎬濇槑鍗楄矾422鍙?
+----------+--------------------+-------------------------------------------+
5 rows in set (0.00 sec)

数据是通过SQL文件导入的,这个SQL文件也是UTF8编码的:

数据库、表都重建了,数据文件也保证是UTF8了,但cmd窗口中还是乱码。。。伤心。。。

首先,安装MySQL的时候,我很清楚的记得我设置的编码为UTF8,所以在my.ini文件中:

# ...
[mysql]
default-character-set=utf8
# ...
[mysqld]
# ...
character-set-server=utf8

然后再mysql中验证:

mysql> show variables like '%character%';
+--------------------------+------------------------------------
| Variable_name            | Value                              
+--------------------------+------------------------------------
| character_set_client     | utf8                               
| character_set_connection | utf8                               
| character_set_database   | utf8                               
| character_set_filesystem | binary                             
| character_set_results    | utf8                               
| character_set_server     | utf8                               
| character_set_system     | utf8                               
| character_sets_dir       | C:\Program Files (x86)\MySQL\MySQL 
+--------------------------+------------------------------------
8 rows in set (0.00 sec)

全部都是utf8编码。接下来验证数据库的默认编码:

mysql> show create database abc;
+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
| abc      | CREATE DATABASE `abc` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)

可以看到,数据库的默认编码是utf8。再来验证数据表的默认编码:

mysql> show create table school;
+--------+--------------------------------------------+
| Table  | Create Table                               |
+--------+--------------------------------------------+
| school | CREATE TABLE `school` (
  `schoolid` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `address` varchar(200) NOT NULL,
  `phone` varchar(11) NOT NULL,
  `master` varchar(10) NOT NULL,
  PRIMARY KEY (`schoolid`),
  UNIQUE KEY `master_UNIQUE` (`phone`),
  UNIQUE KEY `address_UNIQUE` (`address`),
  UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 |
+--------+--------------------------------------------+

可以看到,表的编码依然为utf8,那么为什么还是会乱码呢??百度谷歌都找遍了,还是乱码,然并卵。郁闷半天,无意中在一个网页上看到有人说“这是因为Windows的cmd默认编码是GBK,MySQL里面为UTF8,自然就乱码了,改用工具试试”,这才一语惊醒梦中人,于是使用工具查询数据库,结果是这样滴:

这才发现其实MySQL早就按照我设置的UTF编码存储数据了。我晕,竟然被cmd的外表蒙骗了。。。。。。那么,有没有办法设置让cmd也正确显示UTF8的编码呢??又去百度了。。。结果是:还真有!

在cmd中登录mysql后,在输入sql语句前,先设置编码:set names gbk; 

mysql> set names gbk;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from school;
+----------+--------------+------------------------------+-
| schoolid | name         | address                      |
+----------+--------------+------------------------------+-
|        1 | 北京大学            | 北京市中关村北大街47号
|        2 | 清华大学          | 北京市海淀区中关村大街
|        3 | 南京大学           | 江苏省南京市鼓楼区汉口路2
|        4 | 中国人民大学           | 北京市海淀区中关村大街
|        5 | 厦门大学           | 福建省厦门市思明南路422号
+----------+--------------+------------------------------+-
5 rows in set (0.00 sec)

那么,为什么这样设置后,就能正确显示以UTF8存储的数据了呢?

mysql> show variables like '%character%';
+--------------------------+-----------------------------------
| Variable_name            | Value
+--------------------------+-----------------------------------
| character_set_client     | gbk
| character_set_connection | gbk
| character_set_database   | utf8
| character_set_filesystem | binary
| character_set_results    | gbk
| character_set_server     | utf8
| character_set_system     | utf8
| character_sets_dir       | C:\Program Files (x86)\MySQL\MySQL
+--------------------------+-----------------------------------
8 rows in set (0.00 sec)

可以看到,client,connection和result的编码已经设置为gbk了,但server,database,filesystem的编码还是utf8!这就是说,虽然数据依然是使用utf8编码存储的,但是客户端以及返回的结果集是gbk的,而此时cmd窗口的编码正好是gbk,因此该结果集能正确显示了。

搞了半天,结果是这样。。。但这样也好,毕竟让我印象深刻了,应该不会有下次了。

完。

© 著作权归作者所有

摆渡者
粉丝 343
博文 171
码字总数 206504
作品 0
成都
程序员
私信 提问
加载中

评论(2)

摆渡者
摆渡者 博主

引用来自“magsom”的评论

摆渡者你好,我想知道第二张截图中使用的是什么SQL软件工具,是SQLyog吧。

在oschina.net这里留言还要注册1小时后才行……
恩,是的
m
magsom
摆渡者你好,我想知道第二张截图中使用的是什么SQL软件工具,是SQLyog吧。

在oschina.net这里留言还要注册1小时后才行……
mysql插入数据显示中文乱码

MySQL 插入数据时,中文乱码问题的解决 当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12','Sales',2000,'是个好员......

qq5805bc784f826
2017/09/06
0
0
MySQL 插入数据时,中文乱码问题的解决

随笔 - 102 文章 - 0 评论 - 113 MySQL 插入数据时,中文乱码问题的解决 当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','20......

adbug
2016/04/17
80
0
MySQL--字符编码和字符集

前言: 一般来说,出现中文乱码,都是客户端和服务端字符集不匹配导致的原因。(默认未指定字符集创建的数据库表,都是latinl字符集, 强烈建议使用utf8字符集)    保证不出现乱码的思想:...

朱飞东
2018/06/26
0
0
你的php网页乱码了吗

一、 学习php的童鞋在编写网页的时候,要是设计到中文内容的储存的时候,大多会出现一个问题就是乱码。一般乱码的话,我们可以检查三个方面 (1)网页编码是否正确,比如是否在头部那里加入原...

qq414207614
2014/12/19
0
0
再谈乱码问题,如何解决MYSQL数据中文乱码问题

在之前的文章里,我已经提过如何解决JSP中乱码问题(解决tomcat下中文乱码问题 ),其中也详细解说了MYSQL乱码问题,相信通过里面的办法,肯定都已经解决了JSP里的乱码问题,不过还是有些人的...

ly5156
2011/08/12
124
0

没有更多内容

加载失败,请刷新页面

加载更多

搭建高可用MongoDB集群(分片)

搭建高可用MongoDB集群(分片) MongoDB基础请参考:https://blog.51cto.com/kaliarch/2044423 MongoDB(replica set)请参考:https://blog.51cto.com/kaliarch/2044618 一、概述 1.1 背景 ......

linjin200
15分钟前
4
0
CDH6.0.1集成tez-0.9.1计算引擎

参考文章: https://www.jianshu.com/p/9fb9f32e1f0f https://www.baidu.com/link?url=OgpwasnZi7H1dySN2T111sseEWDBaCCTC3DFV61G7756YbrkJCA8Y3UFaueyqnfN&wd=&eqid=daeb8b3500049cf3000000......

Sheav
17分钟前
4
0
Vue内置指令的使用

v-model(数据绑定) v-model常用于表单数据的双向绑定,它本质上是一个语法糖。它主要的有两种应用: 在文本框、多行文本、input的下拉框、单选按钮、复选框中的应用 <div id="app"> ...

凌兮洛
17分钟前
4
0
外部来源应用检查-烦死了,终于找到解决设置了

Android 连接usb调试应用的时候: 华为关闭方法:1、设置-安全-更多安全设置,关掉外部来源应用检查。2、设置-系统-开发人员选项-关闭“监控ADB安装应用” 不知道OPPO 怎么关闭的?...

QGlaunch
18分钟前
4
0
6个K8s日志系统建设中的典型问题,你遇到过几个?

作者 | 元乙 阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11、双 12 考验。 导读:随着 K8s 不断更新迭代,使...

阿里云官方博客
20分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部