2010-10-05 68 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