mysql 乱码问题

问题描述:使用sqlyog工具查询表中数据,中文则显示为乱码。

 

首先确认在ecplise项目与mysql数据库都是UTF-8字符集。

 

解决过程:

在my.ini文件中新增default-character-set=UTF8,重启mysql服务器启动失败。查原因,说是这个参数是5.1之前版本会取这个参数。5.5版本后,参数名称变化了。

当前mysql版本为5.6。再次修改为character-set-server=utf8,重新启动服务。服务启动成功。

再次查看,中文仍显示为乱码。

 

后在ecplise项目中,重新向表中生成数据。新生成的数据,在sqlyog中查询中文显示正常,而原来乱码的数据仍显示乱码。

看到网上有说“MySQL要支持完整的中文字符集,应该设置为GBK编码。”,将utf8修改为GBK后,重新生成的数据,中文也显示正常。

 

难道是数据库中一定要有这个character-set-server?将配置文件中此参数值注释掉后,重新插入数据,测试发现中文又显示为乱码了。

同时需要关注:

1、数据库字符集,比如为utf-8.

2、数据库创建表时为表设置的字符集,表中字段的字符集。尤其是开始数据库字符集设置错误的情况下,需要同步修改。

 

查看设置字符集

# 查看MySQL字符集设置情况
show variables like 'character_set%';
 
# 查看库的字符集
show create database db;
 
# 查看表的字符集,实际为查看表的建表SQL
show create table db_tb\G
 
# 查询所有
show collation;
 
# 设置表的字符集
set tables utf8;

 

解决方法:

1>系统方面
cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
 
2>客户端(程序),调整字符集为latin1。
mysql> set names latin1;        #临时生效
Query OK, 0 rows affected (0.00 sec)
    #更改my.cnf客户端模块的参数,实现set name latin1 的效果,并且永久生效。
    [client]
default-character-set=latin1
#无需重启服务,退出登录就生效,相当于set name latin1。
 
3>服务端,更改my.cnf参数
[mysqld]
default-character-set=latin1        #适合5.1及以前版本
character-set-server=latin1         #适合5.5
 
4>库、表、程序
#建表指定utf8字符集
mysql> create database nick_defailtsss DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

 

看到一篇文章,详细介绍了乱码:FaceBook专家:10分钟彻底解决MySQL乱码问题?

目录如下:

Part 1 字符集和字符编码

· 什么是字符集

· 什么是字符编码

· UTF-8和Unicode的关系

· UTF-8编码简介

· 为什么会出现乱码

· 如何识别乱码的本来想要表达的文字

· 常见问题处理之Emoji 

Part 2 MySQL乱码

· MySQL出现乱码的原因

· 如何避免乱码

 

posted @ 2016-06-14 11:05  milkty  阅读(736)  评论(0编辑  收藏  举报