MySQL中UTF8编码的数据在cmd下乱码
来源:互联网 发布:炉石传说新手入门知乎 编辑:程序博客网 时间:2024/05/16 08:05
此文章为转载,博主今天学习MySql遇到乱码问题,网上查了半天终于解决,原文地址:https://my.oschina.net/itblog/blog/529198
花了一下午,解决MySQL在Windows的cmd下中文乱码的问题。
mysql> use abc;Database changedmysql> 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,因此该结果集能正确显示了。
搞了半天,结果是这样。。。但这样也好,毕竟让我印象深刻了,应该不会有下次了。
完。
- MySQL中UTF8编码的数据在cmd下乱码
- MySql中UTF-8编码的数据在CMD窗口显示乱码的解决方法
- MySQL中UTF-8编码的数据在CMD命令行显示乱码解决方案
- Windows中在CMD下设置支持UTF8编码格式
- 在Windows的CMD中如何设置支持UTF8编码
- 在Windows的CMD中如何设置支持UTF8编码?
- 在Windows的CMD中如何设置支持UTF8编码?
- 在Windows的CMD中如何设置支持UTF8编码?
- 在Windows的CMD中如何设置支持UTF8编码
- 在Windows的CMD中如何设置支持UTF8编码
- 在Windows的CMD中如何设置支持UTF8编码
- 在Windows的CMD中如何设置支持UTF8编码
- 在Windows的CMD中如何设置支持UTF8编码
- UTF8默认编码下的MYSQL命令框中输入汉字显示乱码的问题
- 在JDBC中 MySql中文乱码 创建utf8编码的数据库
- 显示MySql中utf8编码下的中文
- cmd命令行下查看utf8的编码文件
- cmd命令行下查看utf8的编码文件
- Struts2系列笔记(3)---Action类的3种书写方式
- git 还原文件到某个版本
- 浏览器内核的解析和对比
- 利用数据库存储订单、通知和任务,构建高性能队列
- Unity3D隐藏的坑记录
- MySQL中UTF8编码的数据在cmd下乱码
- 这样子来理解C语言中指针的指针
- Android studio 快捷键大全
- 9、二维数组
- 数据与C
- Android使用百度语音识别
- Sonatype Nexus 搭建Maven 私服
- VMware语言包切换
- 自定义pageControl