MySQL字符集全都设置成了UTF8编码了。
在Delphi中,使用TADOQuery向MySQL数据库插入记录。
代码如下,
1.采用Parameters设置参数时,中文插入数据库中后就乱码了。
  with qry1 do
  begin
    SQL.Clear;
    SQL.Add('insert into t_lssgfp (col1,col2,col3) values (:vcol1,:vcol2,:vcol3)');
    Parameters.ParamByName('vcol1').Value:='001';
    Parameters.ParamByName('vcol2').Value:='001';
    Parameters.ParamByName('vcol3').Value:='中文乱码';
    ExecSQL;
  end;
2.但是如果不采用Parameters,而直接写成下面这样,就不会乱码。
  with qry1 do
  begin
    SQL.Clear;
    SQL.Add('insert into t_lssgfp (col1,col2,col3) values ("001","001","中文乱码")');
    ExecSQL;
  end;难道是TADOQuery有问题?请问如何解决?

解决方案 »

  1.   

    試著指定 ParamByName('vcol3').datatype
      

  2.   

    with qry1 do 
      begin
        SQL.Clear;
        SQL.Add('insert into t_lssgfp (col1,col2,col3) values (:vcol1,:vcol2,:vcol3)');
        Parameters.Clear;
        Parameters.AddParameter;
        Parameters[0].Name:='vcol1';
        Parameters[0].DataType:=ftString;
        Parameters[0].Direction:=pdInput;
        Parameters[0].Value:='001';
        Parameters.AddParameter;
        Parameters[1].Name:='vcol2';
        Parameters[1].DataType:=ftString;
        Parameters[1].Direction:=pdInput;
        Parameters[1].Value:='002';
        Parameters.AddParameter;
        Parameters[2].Name:='vcol3';
        Parameters[2].DataType:=ftString;
        Parameters[2].Direction:=pdInput;
        Parameters[2].Value:='中文乱码';
        ExecSQL;
      end;这样试试.
      

  3.   

    没有人能解决?
    难道是borland  ADO控件的BUG?
      

  4.   

    http://topic.csdn.net/u/20100201/22/8076a391-4978-4e3a-80ca-ecd6439c9bd1.html?62057
    看我的贴子,在ADOQUERY的DataBeforeOpen(DataSet: TDataSet);中重新设置参数的size
      

  5.   

    ADOQuery.Parameters.ParamByName('参数名').Size :=Length(ADOQuery.Parameters.ParamByName('参数名'').Value); 
      

  6.   


    Parameters[2].Value := UTF8Encode('中文乱码');
      

  7.   

    这个应该是ADODB.pas中的一个BUG吧,处理双字节字时长度计算错误,网上一查,原理分析的很多,就不再多说了,但是解决方法能看到的不多,我基本上看到的是同一个人出手的一份分析及相关代码不过只显示一半与乱码不知是否是一回事,期待楼主回复。
      

  8.   

    ADOQuery1.Parameters.ParamByName('v3').DataType := ftWideString;
    ADOQuery1.Parameters.ParamByName('v3').Value := ws;设置dataType为ftWideString,搞定
      

  9.   

    可試試datatype設置為ftwidestring;與否,可能是字符集的問題