解决MySQL中UTF-8编码的数据在命令行显示乱码

来源:互联网 发布:无锡华云数据面试 编辑:程序博客网 时间:2024/05/16 07:33

测试环境信息

OS : windows 10 专业版 64位 14393

MySQL : MySQL Server 5.5 64位

先来查询一下自己系统上MySQL数据库的编码情况,输入以下命令

show variables like '%character%';

这里写图片描述

从这里可以知道mysql数据库已经被设置为utf-8编码方式。


示例


我通过Navicat工具创建一个测试数据库 Test,保证数据库、数据表、数据库文件都是UTF8-编码方式。

这里写图片描述

我们再来创建一个student表,表结构如下:

这里写图片描述

这里写图片描述

在Navicat工具里为student表插入两条信息

这里写图片描述

然后我们在Navicat工具里通过命令行窗口查询student表的建表信息和数据

这里写图片描述

我们再通过windows的cmd命令行访问student表

这里写图片描述

现在改从cmd命令行插入数据:

但直接在cmd中输入包含中文的insert语句时,mysql会报错(原因等会再说

这里写图片描述

那就先写好一个sql脚本,再通过source命令导入就不会报错了

source xx.sql

这里写图片描述
这里写图片描述

以上的案例估计就是大家经常会遇上的中文乱码问题了。


为什么会出现中文乱码呢?

这是因为Windows的CMD默认编码是GBK,MySQL里面是按照UTF-8编码存储数据的,所以CMD不支持自然就乱码了。而刚才我们使用到的Navicat工具,由于它本身的编码被设置为utf-8,所以我们的各种操作都能正常进行。

解决方案

在输入SQL语句前先设置编码:set names gbk ,再输入SQL。

这里写图片描述

为什么这样设置就能正常显示utf-8编码的数据呢?

请看图:

这里写图片描述

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

阅读全文
0 0
原创粉丝点击