在D2007下用dbexpress连mysql5.0.48,怎么解决取出中文乱码问题?插入中文数据时通不过。已经测试过下面的代码
  SQLQuery1.Close();
   SQLQuery1.SQL.Text := 'SET NAMES GBK';
   SQLQuery1.ExecSQL();
   SQLQuery1.Close();
   SQLQuery1.SQL.Text := 'select * from yonghu';
   SQLQuery1.Open;
   showmessage(SQLQuery1.FieldByName('xingming').AsString); //返回???
 
   SQLQuery1.Close();
   SQLQuery1.SQL.Text := ' INSERT INTO `yonghu`  '
                    + ' (`bianhao`, `daihao`, `xingming`)  '
                    + ' VALUES  '
                    + '   (2, "admin1", "管理员")';{ 1.exe raised exception class TDBXError with message 'Incorrect string value: 
'\xB9\xDC\xC0\xED\xD4\xB1' for column 'Y_xingming' at row 1'. }
   SQLQuery1.execsql;
   
   SQLQuery1.Close();

解决方案 »

  1.   

    更正一下
    SQLQuery1.Close(); 
       SQLQuery1.SQL.Text :=  ' INSERT INTO `yonghu`   ' 
                        +  ' (`bianhao`, `daihao`, `xingming`)   ' 
                        +  ' VALUES   ' 
                        +  '   (2, "admin1", "管理员") '
       SQLQuery1.execsql; ;{这里就报错了: 1.exe raised exception class TDBXError with message  'Incorrect string value:  
    '\xB9\xDC\xC0\xED\xD4\xB1 ' for column  'Y_xingming ' at row 1 '. } 
      

  2.   

    插入的字段value前加  N
      

  3.   

    没有用过mysql会不会和客户端的字符集有关系
    http://www.itpub.net/showthread.php?s=&threadid=662823
      

  4.   

    show   variables   like   "%char%";的结果返回是:
    Variable_name                 Value
    character_set_client         utf8
    character_set_connection utf8
    character_set_database         gb2312
    character_set_filesystem binary
    character_set_results         utf8
    character_set_server         gbk
    character_set_system         utf8
    character_sets_dir         C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\
    --------------------------
    brightyang: 不明白你说的。。能具体点?
      

  5.   

    比如下面的语句
     adoquery1.SQL.Add('insert into dbo.VPN_SendMessageLog ( SendDate_datetime,SendTimes_int,LogContent_ntext ) values  (getdate(),'+edit1.Text+','''+ intext+''')');当我的intext为中文的时候,直接存入会变乱码;这时,你可以在字段的存前面加N
     adoquery1.SQL.Add('insert into dbo.VPN_SendMessageLog ( SendDate_datetime,SendTimes_int,LogContent_ntext ) values  (getdate(),'+edit1.Text+',N'''+ intext+''')');
      

  6.   

    看来是客户端字符集问题。
    这个是用dbgrid返回的结果(上面是sql manager 2007返回的,它的中文显示就没问题)
    Variable_name             Value
    character_set_client      latin1
    character_set_connection  latin1
    character_set_database    gb2312
    character_set_filesystem  binary
    character_set_results     latin1
    character_set_server      gbk
    character_set_system      utf8
    character_sets_dir        C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\------------------
    还是那个问题怎么解决?我也在测试。----------
    brightyang :你用的是ado连接 能插入中文数据,我用的是dbexpress连接 插入中文数据都通不过(报错)
      

  7.   

    咯...我用ado insert时加了N确实不变乱码了N是针对sqlserver 的 mysql不知道是加什么,:)到数据库版look一下
      

  8.   

    有新发现,mysql用默认字符集,不用指定字符集如GBK,dbexpress操作中文数据可以哦,显示,插入中文数据都可以。
    我还是想知道如果指定GBK字符集,怎么处理。
      

  9.   

    hongqi162 :
    mysql5用默认字符集 用dbexpress连就没有中文乱码现象。。