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出现乱码的原因 · 如何避免乱码