2010-10-05 73 views
2

尝试使用Delphi 2010和TADOConnection,将Unicode字符值插入到MySQL数据库中,但没有运气。使用Delphi 2010将Unicode字符插入到MySQL

与ODBC

Provider=MSDASQL.1;Persist Security Info=False;Data Source=mysrc;Initial Catalog=mydb 

的SQL命令连接:

INSERT INTO myTable (aCol) VALUES('Russian: русский язык') 

试图与

TADOConnection.Execute(SQL) 

直接将其插入它只有在数据库为“俄罗斯结束了:?? “”

也尝试了方法这里建议: http://www.3delite.hu/Object%20Pascal%20Developer%20Resources/delphiunicodemysqltutorial.html

 
With TADOQuery do 
    begin 
    SQL.Clear; 
    SQL.Add('INSERT INTO myTable (aCol) VALUES(:p)); 
    Parameters.ParamByName('p').DataType := ftWideString; 
    Parameters.ParamByName('p').Value := 'Russian: русский язык'; 
    ExecSQL; 
end; 

使这个代码不为我在所有的工作,只有当我添加参数在设计时,但后来它仍然是同样的结果在数据库与问号全部结束。

+0

这是什么样的Unicode? UTF-16?目标表中的编码是什么? – 2010-10-05 15:00:50

+0

不确定,因为我不是设置数据库的人。我如何检查? 但我知道它可以存储俄语字符,因为我有一个PHP脚本,可以做到这一点没有问题 – Bulan 2010-10-05 15:13:41

回答

2

看来TADOConnection不支持Unicode,至少我无法得到它的工作。

如果我改用dbExpress TSQLConnection和TSQLQuery插入到数据库,它的工作原理如下。但我必须使用参数,而不是直接使用INSERT命令。

   with qTarget.Params.ParamByName('p' + IntToStr(i)) do 
       begin 
        DataType := ftWideString; 
        Value   := Fields[i].AsWideString; 
       end; 
       qTarget.ExecSQL; 
+0

其实你应该do:Value:= Field [i] .Value;因为那将接受空值。如果空值无效,那么您不需要将DataType设置为ftWideString,它将从您传递给Value的类型中推导出来,而WideString似乎无论如何都是默认的VARCHAR表示。 – Trinidad 2010-10-06 13:11:31

+0

好的,thx的信息,我会改变,所以空值也可以处理 – Bulan 2010-10-07 08:10:33

0

我相信这个PHP脚本执行SET NAMES utf8查询第一

+0

也许,但我不能运行该命令使用ADO ODBC连接,驱动程序说“不支持的命令” – Bulan 2010-10-06 11:14:15