常识:

1、数据库乱码的问题确认:数据库乱码归集为字符集问题;

2、查每个字符集的校队规则:show character set; (观察例 utf8  utf8_general_ci )

3、创建gbk字符集数据库:

    create database name_gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

4、创建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 (中英文环境)




5、字符集的更改步骤lanti1->UTF8:


(1)建库及建表的语句导出,sed批量修改为uft8;

(2)导出所有mysql数据;

(3)修改mysql服务端和客户端的编码为utf8;

(4)删除原有的库和表的数据;

(5)导入新的建建库及建表的语句;

(6)导入mysql的所有数据;