使用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