解决方案 »

  1.   

    数据库比较老,还是5.0多一点的,没有这个字符集,关键的问题不是设置哪个字符的问题,而是设置的字符集能让分文件生效……因为单个文件使用latin1字符集导出来是没有问题的……,但是分开导出就出问题了!
      

  2.   

    看一下原表的字符集设置是什么?
    然后建议尝试一下 gbk 或者 gb2312
    或者直接用 mysql.exe 连接进去看一下中文是否正常。
      

  3.   

    GBK 字符集兼容, 可以统一用 BGK 编码进行导出
      

  4.   

    表创建结构在mysql.exe下输出的数据用上面第二个分文件的方法导出的数据,显示异常用上面第一个方法把所有数据导入到一个文件中,正常mysql> show variables like 'char%';
    +--------------------------+-----------------------------------+
    | Variable_name            | Value                             |
    +--------------------------+-----------------------------------+
    | character_set_client     | utf8                              |
    | character_set_connection | utf8                              |
    | character_set_database   | latin1                            |
    | character_set_filesystem | binary                            |
    | character_set_results    | utf8                              |
    | character_set_server     | latin1                            |
    | character_set_system     | utf8                              |
    | character_sets_dir       | C:\NGBNView\mysql\share\charsets\ |
    +--------------------------+-----------------------------------+
    8 rows in set
    mysql> show full columns from dbpolicy;
    +-------------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
    | Field       | Type         | Collation       | Null | Key | Default | Extra | Privileges                      | Comment |
    +-------------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
    | keystring   | varchar(250) | utf8_general_ci | NO   | PRI |         |       | select,insert,update,references |         |
    | valuestring | varchar(250) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         |
    +-------------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
    2 rows in set
    直接用Navicat看,显示的是乱码mysql> SELECT * FROM dbpolicy;
    +-------------------+--------------------------+
    | keystring         | valuestring              |
    +-------------------+--------------------------+
    | ÅäÖùÜÀíÈÕÖ¾±¸·Ý4 | ConfigManageLogPolicy    |
    | Éú³ÉÀúÊ·ÐÔÄܱ¨±í1 | HistoryPerformanceReport |
    | Éú³ÉÀúÊ·ÐÔÄܱ¨±í2 | HistoryPerformanceReport |
    | Éú³ÉÀúÊ·ÐÔÄܱ¨±í3 | HistoryPerformanceReport |
    +-------------------+--------------------------+
    4 rows in set,但是到数据库bin下的mysql.exe下看是正常的,就上面第二个图片。
    其他表中如果字符集是latin1的,即使有中文数据导出来的(无论是分文件或者一个文件)都能显示正常!
      

  5.   

    额,问题貌似找到了,分文件导出的时候,它是按这个表的创建时指定的(或者默认的)字符集进行导出的,在导入的时候先设置一下字符集,比如说是utf8的,则执行LOAD DATA之前必须先执行一下set character_set_database=utf8,虽然导出的是乱码,但指定了字符集后导入能正常显示(否则导入后也是乱码),但是如果指定的字符集是latin1,而这个表中又有中文数据,导入的时候又得把字符集设置为latin1,这样每次执行LOAD DATA之前都得去设置一下那个字符集,貌似有点麻烦,万一表很多呢,所以这样也不太现实,有没有更好的方法呢?
      

  6.   

    --default-character-set=utf8,试试看下。
      

  7.   

    --default-character-set=utf8,试试看下。
    这个我试过了,就是问题会这样出现如果以前的latin1的数据全是英文的,那还好,没有乱码,但是我的数据库中有的字符集是latin1的表中又有中文数据,这样导入进去就出问题了……最后无奈之举就是:因为数据库的utf8的表比较少,所以在LOAD DATA前进行判断,如果是utf8的表则设置为set character_set_database=utf8,否则则设置为set character_set_database=latin1;数据库前期没规划好,后面就是一个坑……
      

  8.   


    --default-character-set=utf8,试试看下。
    这个我试过了,就是问题会这样出现如果以前的latin1的数据全是英文的,那还好,没有乱码,但是我的数据库中有的字符集是latin1的表中又有中文数据,这样导入进去就出问题了……最后无奈之举就是:因为数据库的utf8的表比较少,所以在LOAD DATA前进行判断,如果是utf8的表则设置为set character_set_database=utf8,否则则设置为set character_set_database=latin1;数据库前期没规划好,后面就是一个坑……
    是啊,一般数据库的字符集都是设置成utf8的。
    而且有些特殊的,比如有符号的,必须设置成utf8mb4,参考下:http://blog.csdn.net/mchdba/article/details/38322561