1、问题确认:数据库乱码归集为字符集问题;
查每个字符集的校队规则:show character set; (观察例 utf8 utf8_general_ci )
创建gbk字符集数据库:
create database name_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
创建:utf8字符集数据库:
create database name_ntf8 CHARACTER SET utf8 COLLATE utf8_general_ci;
#CHARACTER SET 指定字符集; COLLATE gbk_chinese_ci:校对规则;
=======================================然后解决===========================================
法1:
确认库、表的字符集一致
#一般这是临时的,重新登录后需重新设置;
注明:DQL.DQL语句之前set names系统及库表的字符集!
2、查看字符集:
show create database basename\G
*************************** 1. row ***************************
Database: basename
Create Database: CREATE DATABASE `basename` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)
##数据库默认的字符集为latin1
3、调整字符集:
set names latin1;
##正常情况下插入中文字符集时先调整;
4、插入语句后检查:select * from test;
法2
导入的时候 指定字符集(set names latin1),后利用source加载文件;
1、把将要跟新的多个sql语句放到文本里;
#此处注意要set names Latin1; >test.sql
2、进入数据后查看:system cat test.sql
3、利用source 将test.sql 导入;(建议全路径)
4、set names latin1;
5、检查:select * from test;
或者:在sql文件中指定字符集 (set names latin1),然后通过mysql命令导入;
法3:
导入的时候--default-character-set=latin1指定字符集
在mysql导入的时候指定字符集
:mysql -uroot -p‘oldboy123‘ --default-character-set=latin1 test < test.sql
4、在配置文件设置客户端及服务端指定字符集,且永久生效;
更改my.cnf客户端模块的参数,可以实现set names latin1;的效果,并且永久生效。
[clinet]
--default-character-set=latin1
提示:无需重启服务,退出重新登录就生效;相当于set names latin1;
更改服务端字符集简单的方法;
更改my.cnf参数
[mysqld]
--default-character-set=latin1 适合5.1 及以前的版本;
character-set-server=latin1 适合5.5
总之:保证linux系统、客户端、服务端、库、表、程序!字符集统一就不会乱码。
系统字符集设定位置: /etc/sysconfig/i18n ,建议使用LANG=zh_CN.utf8 (中英文环境)