西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > 开发教程 > linux教程 >

Windows使用MySQL数据库管理系统中文乱码问题

时间:2016-05-11 23:04来源:未知 作者:好模板 点击:
本文关于MySQL中文乱码问题的解决方案均基于Windows 10操作系统,如果是Linux系统会有较多不适用之处,请谨慎参考。 一、MySQL中文乱码情况 1. sqlDevelper远程登陆MySQL客户端中文乱码 sqlDev

本文关于MySQL中文乱码问题的解决方案均基于Windows 10操作系统,如果是Linux系统会有较多不适用之处,请谨慎参考。 

一、MySQL中文乱码情况

1. sqlDevelper远程登陆MySQL客户端中文乱码

sqlDeveloper操作MySQL中文乱码  

2. command-line登陆本地MySQL客户端中文乱码

控制台操作MySQL中文乱码

二、MySQL中文乱码产生原因

  Windwos中文系统默认的字符编码集是gbk(扩展国标码,包括简体中文、繁体中文、朝鲜语、日本语等东亚语言),Linux系统默认的字符编码集为utf-8。然而当我们在安装MySQL的时候往往没注意,直接使用了MySQL的默认字符编码集latin1(仅支持英语即其它西欧语言),这就是导致我们在使用MySQL数据库查看记录时出现中文乱码的根本原因所在。

默认 MySQL Server Instance Configuration    

三、MySQL中文乱码可能解决方案

  1. 重新安装MySQL

  说说产生这种想法的原因:通过google搜索,尝试了大致10种左右互联网上提到的解决MySQL中文乱码方法,但是没有一种是能够完美解决我遇到问题的合适方案。经过不知道多少次修改MySQL配置文件my.ini文件的字符集,总是出现莫名奇妙的问题,用一句话说就是"按下葫芦起了瓢"。问题详细描述见 修改MySQL配置文件

  我们重新配置数据库,当然这种重新配置数据库实例是不会删除原来已存在的数据库数据,只是修改一下原有的数据库配置信息。

自定义 MySQL Server Instance Configuration 图1

自定义MySQL Server Instance Configuration 图2

  我们选择reconfigurate如上MySQL Server Instance Configuration图2所示,可以选择Best Support For Multilingualism(对多语言的最佳支持)或者Manual Selected Default Character Set/Collation(手动选择默认字符集/排序方式)中选择gbk或utf-8。本次选择的字符集是:utf-8

  然后经过与原来配置MySQL相同的步骤,然后启动MySQL服务(即运行mysqld)。接下去运行MySQL客户端,查看相应数据库情况,观察中文乱码问题是否解决。

MySQL客户端中文乱码

  不幸的是我们获得的仍然乱码。真的是我们的方案有问题?分析下本次尝试失败的原因: 虽然重新设置了默认的字符集为utf-8,即修改了Index.xml预编译字符集配置文件,也修改了my.ini启动配置文件(包括default-charater-set=utf-8和default-set-server=utf-8),但是需要读者明白的是原来数据库的字符集已经设定,并没有被改变。

  上述理论如何才能判断是正确的呢?那我就尝试一下重新建立一个MySQL数据库,数据库命名为teacher,表命名为therinfo。

  呵呵,又出错了。正当黔驴技穷的时候,又想到了命令行并不支持utf-8格式(中文版windows的命令行默认支持GBK或ascii)。那么明显,如果我们从命令行输入中文字符的时候,在MySQL服务器看来就是驴唇不对马嘴,存的内容天知道是什么玩意。为了验证中文windows命令行真的不支持utf-8这个理论,我又尝试了JDBC操作MySQL数据库,然后再命令行输出。输入情况如下所示。

JDBC操作数据库在中文版windows命令行输出数据库内容

  可以输出,只不过输出的中文是乱码。显然这是命令行数据库客户端与数据库服务器端所支持编码不同导致。那么可以说,用JDBC操作数据库后,在MySQL数据中的内容确实是utf-8数据格式的,但是在命令行输出看成了GBK编码,导致仍然是乱码。

  (此部分建议先看MySQL原始配置文件)这样看来,似乎只要把客户端编码格式改为GBK就能够顺利解决乱码问题。为了避免修改配置文件出现的错误,我特意查看了Index.xml预编译字符集是否支持GBK 。查询结果如下所示。存在gbk编码,说明重新启动MySQL服务过程中是绝对不会出现1067错误的。

  修改的情况为[mysql] default-character-set=gbk,然后保持[mysqld] default-server-set=utf-8不变或改成gbk编码。显示的结果为正确,问题顺利解决。

命令行客户端中文乱码问题解决结果

  从上述步骤中,我们小结一下情况:

  a) [mysql] default-character-set 是客户端默认字符集。如果采用命令行作为客户端,此字符集必须和命令行默认字符集能够匹配,否则出现中文乱码。

  b) [mysql]和[mysqld]数据字符集可以不同,因为MySQL服务器配置文件Index.xml如果有预编译编码,服务器是能够识别客户端数据编码并转换成服务器端编码储存在相应的表中。关键是要在Index.xml配置文件中存在此预编译字符集。

  基于这套经过实践验证的理论,开始尝试解决sqlDevelopor远程登陆MySQL客户端出现中文乱码问题。关于sqlDevelopor远程登陆MySQL数据库步骤详情参考文章《sqlDeveloper远程登陆MySQL数据管理系统》。必须明确一点,sqlDeveloper首先连接MySQL客户端,然后通过客户端再连接MySQL服务器。因此,必须保证sqlDeveloper和MySQL客户端字符编码集相同。

  首先查看sqldevelopor的默认字符编码集:[帮助]-->[关于]-->[属性]-->[file.encoding],查到sqlDevelopor默认显示字符编码集为GBK。情况具体如下图所示。

Oracle SQL Developer 默认字符编码集

  Oracle SQL Developer客户端和其要远程登陆的Command line客户端编码相同,均为gbk,因此数据通讯以及显示没有问题。查询结果如下图所示。

Oracle SQL Developer客户端中文乱码问题解决结果
(责任编辑:好模板)

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容