2010-10-05 6 views
2

Essayer d'insérer des valeurs avec des caractères Unicode dans une base de données MySQL en utilisant Delphi 2010 et TADOConnection sans succès.Insérer des caractères Unicode dans MySQL avec Delphi 2010

Connexion avec ODBC

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

La commande SQL:

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

Essayé insérer directement avec

TADOConnection.Execute(SQL) 

Il ne se termine que dans la base de données « russe: ?? ????? ???? "

également essayé la méthode proposée ici: 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; 

Faire cela dans le code ne fonctionne pas du tout pour moi, que si j'ajouter des paramètres dans designtime, mais il est toujours le même résultat dans la base de données avec des questions partout.

+0

Quel type d'Unicode est-ce? UTF-16? Quel est le codage dans la table cible? –

+0

Je ne suis pas sûr puisque je ne suis pas celui qui a mis en place la base de données. Comment puis-je vérifier? Mais je sais qu'il peut stocker des caractères russes parce que j'ai un script PHP qui peut le faire sans problème – Bulan

Répondre

2

Il semble TADOConnection ne prend pas en charge Unicode, au moins je ne peux pas le faire fonctionner.

Si j'utilise à la place dbExpress TSQLConnection et TSQLQuery pour insérer dans la base de données cela fonctionne comme prévu. Mais je dois le faire avec des paramètres et non avec directement avec une commande INSERT

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

En fait, vous devriez faire: Valeur: = Champ [i] .Valeur; Comme cela accepterait des valeurs nulles. Si les valeurs NULL ne sont pas valides, vous n'avez pas besoin de définir DataType sur ftWideString, il sera déduit du type que vous passez à Value et WideString semble être la représentation VARCHAR par défaut. – Trinidad

+0

Ok, merci pour l'info, je vais changer ça afin que les zéros puissent aussi être traités – Bulan

0

Je crois que ce script PHP exécute une requête SET NAMES utf8 premier

+0

Probablement, mais je ne peux pas exécuter cette commande en utilisant une connexion ADO ODBC, les pilotes dit "commande non supportée" – Bulan

Questions connexes