花了一下午,解决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,因此该结果集能正确显示了。

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

完。

cmd mysql utf8_MySQL中UTF8编码的数据在cmd下乱码相关推荐

  1. mysql gbk编码 字节数,mysql中utf-8编码数据库转换成GBK编码的问题

    摘要 腾兴网为您分享:mysql中utf-8编码数据库转换成GBK编码的问题,之了课堂,易信,一折包邮,星球联盟等软件知识,以及七日杀,草莓软件,装修施工站,桔子会,桌面切换,看小说神器,酷派应用商店 ...

  2. 项目部署到服务器后字符编码,将UTF-8编码的数据发布到服务器会丢失某些字符...

    将UTF-8编码的数据发布到服务器会丢失某些字符 我正在从事包括服务器(JavaEE应用程序)和客户端(Android应用程序)通信的项目. XML作为HTTP请求的POST参数之一发送(称为&quo ...

  3. java向mysql写入数据慢_通过java代码往mysql数据库中写入日期相关数据少13个小时...

    通过show variables like '%time_zone%'; 查看时区: CST 时区 名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard ...

  4. 解决utf8编码的php生成csv打开乱码的问题

    解决utf8编码的php生成csv打开乱码的问题 参考文章: (1)解决utf8编码的php生成csv打开乱码的问题 (2)https://www.cnblogs.com/Crius/p/115586 ...

  5. mysql8中文排序_mysql中utf8编码的中文字段按拼音排序

    http://blog.s777n.net/orderbychinesefieldutf8/comment-page-2/ 2010-08-24 17:36 by TomorrowMan | 分类: ...

  6. Java程序向MySql数据库中插入的中文数据变成了问号

    找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...

  7. 设置mysql为utf-8_如何设置mysql数据库为utf-8编码

    满意答案 ddddlyxy 2015.01.27 采纳率:47%    等级:12 已帮助:12169人 方法一: mysql> show variables like '%chara%'; + ...

  8. python中utf-8编码_Python 使用 UTF-8 编码(转)

    一般我喜欢用 utf-8 编码,在 python 怎么使用呢? 1.在 python 源码文件中用 utf-8 文字.一般会报错,如下: File "F:\workspace\psh\src ...

  9. linux 下URL中 UTF-8编码、GB2312编码与汉字之间的转换

    下面是UTF-8编码的转换代码 #include <string.h> #include <stdio.h> #include <stdlib.h>/* 16进制字 ...

最新文章

  1. 领导应该怎么当?盯目标、抓计划、管时间、做农夫、当仆人……
  2. air java_Air 调用本地化java程序
  3. Serverless 时代 DevOps 的最佳打开方式
  4. do{...}while(0);写法用途详解
  5. 第一百二十一期:当新闻报道用上AR 技术,能为读者带来什么?
  6. ubuntu 13.04 mysql_Ubuntu 13.04 MySQL Proxy安装与配置
  7. [USACO07NOV]牛栏Cow Hurdles
  8. POJ1769(线段树+DP)
  9. DCC2020:VVC帧内预测中基于梯度的CU划分早停止
  10. 通达OA2008从windows环境移植到linux部署手册
  11. warning: setUpNet DNN module was not built with CUDA backend; switching to CPU错误解决
  12. sql server数据库 18456错误修复
  13. 中国危废处理行业深度调研与未来发展规划研究报告2022-2027年新版
  14. JVM(1)之JVM的组成详解(字符串常量池+双亲委派机制+JIT即时编译......)
  15. 高德地图WEB端,在所画的圆(Circle)内显示在圆(Marker)内的点
  16. vue使用upload上传附件
  17. jquery视频播放器_jQuery插入QuickTime视频播放器
  18. 正常计算机的c盘空间多大,电脑C盘应该留多大空间?
  19. 量子计算机是哪个国家研制出来,万万没想到:最强大量子计算机居然由工业巨头研制出来了...
  20. sbrk() 函数是干什么的?

热门文章

  1. python命令行运行django项目, can‘t open file ‘manage.py‘ 问题解决
  2. 关于Windows 1803版本内核隔离打开后无法关闭的解决方案
  3. 黑群硬盘休眠问题的一种解决思路(DS916+,DSM 6.1.7)
  4. metrics-server 安装问题解决
  5. 使用uploadify上传大文件报 IO error #2038错误的解决方案
  6. adb server version (31) doesn‘t match this client (39) 解决方案
  7. Git Your branch is ahead of ‘origin/master‘ by X commits解决方法
  8. XSS 跨站脚本攻击 的防御解决方案
  9. 在不推动提交的情况下触发Travis-CI重建?
  10. 什么是lambda(函数)?