分享

Navicat for MySQL中文乱码问题

 JhouShuai 2016-03-21

使用Navicat存储中文数据出现乱码或者空白的问题。经过一番折腾终于得到解决。

表my_chat设计如下:


在数据库chatroom上右击打开console控制台,输入SHOW VARIABLES LIKE '%character_%'; 

可以看到MySQL 相关编码的设置,全部修改为utf8后如下:


若编码不统一可以参照这篇文章修改:MySQL 编码设置http://eagletff.blog.163.com/blog/static/116350928201171543523558

1、编辑MySQL 的配置文件


MySQL 的配置文件Windows下一般在系统目录下或者在MySQL 的安装目录下名字叫my.ini,可以搜索,Linux下一般是 /etc/my.cnf

--在 [mysqld] 标签下加上三行
default-character-set = utf8
character_set_server = utf8
lower_case_table_names = 1        //表名不区分大小写(此与编码无关)

--在 [mysql]  标签下加上一行
    default-character-set = utf8

--在 [mysql.server]标签下加上一行
    default-character-set = utf8

--在 [mysqld_safe]标签下加上一行
    default-character-set = utf8

--在 [client]标签下加上一行
    default-character-set = utf8


2、重新启动MySQL 服务
Windows可在服务管理器中操作,也可使用命令行:
net stop mysql 回车
net start mysql 回车
服务名可能不一定为MySQL ,请按自己的设置

Linux下面可是用 service mysql restart

如果出现启动失败,请检查配置文件有没有设置错误

开始的时候是author与emotion字段中文乱码:


按上述方法,我在自己的my.ini中只找到了[client]和[mysql]两项,按上述方法修改后,保存的时候提示含有unicode字符,于是我另存,替换,但是

在重新启动MySQL 服务的时候一直失败。

最终发现该配置文件重新改回ANSI编码后,再加入上述修改,可正常启动MySQL 。

新的问题出现:字符类型为varchar的字段中文显示为空白(author和emotion字段),


此法不奏效。

网上找到的第二种方法:Navicat for MySQL 显示中文乱码解决办法
http://blog.163.com/chenyao_2000/blog/static/1280109302011431476629/


最近遇到一个问题,用Navicat for MySQL 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题就的寻求解决之道,百度了好长时间也没解决,网上那些解决办法都不适合我的问题,网上的大多数解决方法是在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用MySQL 字符集”前的对勾,在编码里选择utf-8,这种方法对于部分问题可能适合,但是我的乱码问题依然存在,于是乎我又将utf-8改称gbk,gb2312,全都过问题依然粹依旧。
后来跟一个编程的老程序员请教了一下,他说可能是MySQL 的配置文件有问题,就是在MySQL 的安装目录下的my.ini文件里的默认编码有问题,将my.ini文件的这两处的默认编码
==========================================
[mysql]
default-character-set=utf8 <------
==========================================
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3306
#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.0/"
#Path to the database root
datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8 <------
===========================================
箭头所指的地方确保为utf8(注意不是utf-8),navicat 里的使用的是MySQL 字符集(此时不用再选择utf-8编码), 问题才得以解决!

上述方法后半部分跟第一种方法一样,他这里解决了,但是我没能实现。

反而是利用红色部分的方法找到了解决办法。

在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用MySQL 字符集”前的对勾,在编码里选择Default

我在编码里选择utf8之后,


查看表时,又出现了空白


最终解决办法是,在最后编码的地方不是选择utf8而是Default。熟悉的中文就回来了!




总结:一般的解决办法两种:

1、修改MySQL 的配置文件在相对应的位置添加如下代码
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8

重启服务。

但是可能导致无法重启,可以把配置文件编码修改为ANSI试试。

2、

在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用MySQL 字符集”前的对勾,在编码里选择Default

也有人编码的地方可能是“Current Windows Codepage”,此法不修改my.ini。


注:

要保证不乱码,就必须将三个编码统一:一是网页自身的编码,二是HTML里指定的编码,三是PHP告诉Mysql的编码(包括character_set_client和character_set_results)。
第一和第二个编码,如果使用DW之类的编辑器写的网页,通常是一致的,但用记事本写的网页,有可能不一致。
第三个编码,需要手工通知Mysql。这步可以通过在PHP里使用mysql_query("set names characterX")来实现。(出自:PHP和MySQL的编码问题


最后贴几个比较有参考意义的文章:


MySQL 编码设置 http://eagletff.blog.163.com/blog/static/116350928201171543523558

Navicat for MySQL 显示中文乱码解决办法http://blog.163.com/chenyao_2000/blog/static/1280109302011431476629/

MySQL 中文乱码解决      http://jingyan.baidu.com/article/e4d08ffdd9bd630fd2f60de6.html

MySQL插入中文显示不了的问题     http://hi.baidu.com/yulewujixian/item/8a2e80ec9be075b52f140b23

PHP和MySQL的编码问题 http://blog.csdn.net/martinkro/article/details/5352474

中文常用编码方式(GBK,GB2312,Unicode) http://blog.sina.com.cn/s/blog_5ac88b350100c2bx.html

UNICODE,GBK,UTF-8区别 http://www.cnblogs.com/cy163/archive/2007/05/31/766886.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多