C#程序功能:
1.同时连接两台Linux平台下的mysql服务器。
2.可以显示其中一台作为源数据库服务器中的各个数据库及每个数据库中的每张表。
3.选中每张表或整个数据库,可以将其拷贝到另一台作为目标数据库中。测试环境及一些设置:
1.两台数据库服务器均是Linux平台,数据库字符集即character_set_database都为gbk.
2.拷贝程序的连接字符串中(即包含IP,用户名,密码等信息的连接字符串中最后添加的character set = gbk)字符集设为gbk,连接成功后都"set names gbk".遇到的问题:
1.从一台服务器拷贝到另一台服务器正常,反过来拷出现乱码。
2.例如A服务器中某个数据库中的a表编码为gbk,通过上述程序拷贝到B服务器上。通过mysql-front查看B服务器中从A拷贝得到的a表也正常。但是通过程序从B服务器再拷贝回A服务器将A中原a表覆盖,即出现乱码。描述得有点多,也不知道说清了没有,在线等帮助,谢谢了!

解决方案 »

  1.   

    另外补充个疑问????!!
       即在连接字符串中设置的字符集起到什么作用?
           和连接后再“set names gbk”有什么区别?
       我自己实验的结果:
       1.如果在连接字符串中设置character set=gbk,即使连接成功后不设置“set names gbk”
          A->B的拷贝也是成功的。
       2.如果连接字符串中不设置character set=gbk,填其它的字符集如:latin1.连接成功后再设置“set names
         gbk”,A->B的拷贝不成功。    还望各位大侠不吝赐教。。
      

  2.   


    private static MySqlConnection myConnection = new MySqlConnection("Database=XXX;Data Source=localhost;User Id=root;Password=XXX;Character Set=gbk");这里Character Set=gbk 是表示 连接采用的字符集----------------------
     我自己实验的结果: 
      1.如果在连接字符串中设置character set=gbk,即使连接成功后不设置“set names gbk” 
          A->B的拷贝也是成功的。 
      2.如果连接字符串中不设置character set=gbk,填其它的字符集如:latin1.连接成功后再设置“set names 
        gbk”,A->B的拷贝不成功。 
    -------------------------------
    因为连接的时候没设置,编码不设置,肯定会乱码,因为有默认链接编码方式
    这篇文章应该看下
    http://blog.sina.com.cn/s/blog_45d7466101000b86.html
    浏览phpMyAdmin 之后的相关设置
    character set client utf8 
    (全局值) latin1 
    character set connection utf8 
    (全局值) latin1 
    character set database latin1 
    character set filesystem binary 
    character set results utf8 
    (全局值) latin1 
    character set server latin1 
    character set system utf8 
      

  3.   

    繁体系统用big5全部统一用utf-8
      

  4.   

    这里Character Set=gbk 是表示 连接采用的字符集 因为连接的时候没设置,编码不设置,肯定会乱码,因为有默认链接编码方式;首先谢谢你的关注与回复,请教下,这里的连接没设置,编码不设置,此处的编码指什么?我很菜啊
      

  5.   

    使用SHOW VARIABLES LIKE 'character_set_%';命令就可以看到 字符的默认设置信息了
      

  6.   


    这个命令我知道,用“set names 'gbk'”命令可以设置其中的三个:client ,connection,result.
    但是我还不明白 连接字符串中“character set=gbk”这个设置起到了什么作用?
      

  7.   

    就是设置 connection 的连接字符集是 gbk
      

  8.   


    你的意思难道是指 character set=gbk的命令仅仅设置了character_set_connection=gbk这一个变量?
    那不就是set names gbk命令的子集了??越来越糊涂
      

  9.   

    CharSet, Character Set  
      Specifies the character set that should be used to encode all queries sent to the server. Resultsets are still returned in the character set of the data returned. 
    http://dev.mysql.com/doc/refman/5.1/en/connector-net-examples-mysqlconnection.html#connector-net-examples-mysqlconnection-connectionstring
      

  10.   

    谢谢大家的关注~可惜问题还是没有解决。。
    对于两台MYSQL数据库来说,所存储的数据都是GBK,用客户端去连接读取信息时,字符变量设置完全一致(连接字符串中包含character set=gbk,连接成功设置“set names gbk”),A读取正确,B出现乱码。唯一不同的是两台MYSQL数据库版本不一致,A是5.1.29二进制分发版本,B是5.0.45RPM包安装版本谁能给点指点性意见!谢谢
      

  11.   


    谢谢你一直关注,可是我可以确定两个数据库字符集是GBK,里面的表也是GBK。而且通过MySQL-Front去查看B表数据也是正确的。可是通过C#所写的客户端去连接确会出现乱码