大家好,目前我通过linux中的C程序接口mysql_real_query查询mysql中的数据,在mysql中的编码是UTF-8,我自己插入的数据没有问题,可以正常读取出来,我采用单步跟踪调试也确实是UTF-8的编码。
而我同事用Delphi+mydac操作mysql数据库,把mydac设置为UTF-8,他通过Delphi程序插入,然后读取出来的汉字都是正常的,如果不这么设置就是乱码。而我通过mysql_real_query查询他插入的汉字数据时,却是问号!且一个汉字对应一个问号。按照我的理解,即使编码不对也不应该一个汉字只有一个字节,用单步跟踪查看时确实是63,‘?’。这是怎么回事?
      还有一点,我的系统是Opensuse10.2,在终端上登录了Redhat9.0的开发服务器,然后开发调试程序,我直接用mysql命令登录到mysql数据库,手动运行select * from table的命令,却可以正常显示通过Delphi程序插入的汉字!而我自己插入的UTF-8是乱码。我的终端已经设置字符编码为UTF-8了,并且我也尝试了GB18030、GBK、GB2312都无法正常显示我插入的汉字,而实际在代码中调试时可以看到是三个字节的UTF-8编码数据的。这又是怎么回事?我另外一个同事用的是Fedora7,他也通过终端登录到Redhat9.0的开发服务器(跟我登录的是同一台),他的终端也设置字符编码是UTF-8,但是他的mysql命令行却可以正常显示我插入的数据,而Delphi插入的数据他看到的是问号!与我通过代码读取的结果一致。
    不太明白,为何我插入的肯定是UTF-8的编码的汉字在我的终端上为何乱码?而Delphi插入的数据就算不是UTF-8是其他的GB2312什么的编码,一个汉字最少也应该是两个字节,而现在仅仅是63,是什么原因呢?
   google了一下,发现有很多mysql中文出现问号的情况,但都是客户端连接配置问题,与我这个不同,Delphi程序写入、读出都正常,对我写入的数据却是乱码;我读Delphi的程序却是问号,真是很奇怪!希望高手能指点一下。
高分酬谢

解决方案 »

  1.   

    写入的时候编码也要和数据库的编码一致.
    写入之前SET NAMES utf8
    读取之前SET NAMES utf8 
      

  2.   

    这个好像不是这个问题,对于Delphi程序本身来说,插入、读取都不是问题,我自己程序插入、读取也都没有问题,有问题的是,我的程序访问Delphi程序插入的内容是问号,而Delphi程序访问我插入的内容是乱码!我们各自插入的内容都是UTF-8
      

  3.   

    你的程序和DELPHI之间的编码转化你自己弄清楚了没有,首先!
      

  4.   

    首先说明一下,Delphi程序不是我开发的,我只知道对方使用MYDAC连接数据库,我的程序和Delphi程序之间是通过数据库联系的,数据库指定编码是UTF-8的,我自己的编码也是UTF-8的,我单步跟踪调试过,但读取Delphi程序插入的内容时仅仅获取到‘?’,无法判断内容。网上有帖子说到关于问号的问题,但都是程序连接设置不对,在此显然不是这样的问题,Delphi程序与数据库之间是正常的,不正常的是他读取我插入的数据,或者我读取Delphi程序插入的数据。开发Delphi程序的人告诉我,已经把MYDAC设置为UTF-8了。
      

  5.   

    现在我的困难是无法获取Delphi程序插入的内容,不知道该如何查看其十六进制编码,来判断是否是真的UTF-8。