Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment définir le jeu de caractères pour MySQL dans RODBC ?

Je ne connais pas ODBC et RODBC , mais ma lecture de l'extrait de documentation ci-dessus est que SET NAMES 'utf8'; fait partie du dialecte SQL de MySQL , donc vous l'exécutez comme vous le feriez pour n'importe quelle autre instruction SQL que vous pourriez utiliser pour récupérer des données de votre base de données.

Quelque chose comme (non testé):

sqlQuery(myChannel, query = "SET NAMES 'utf8';")

myChannel est le handle de connexion renvoyé par odbcConnect() .

Y a-t-il une raison pour laquelle vous utilisez RODBC sur le package RMySQL ? J'ai eu une bonne expérience de l'utilisation de RMySQL pour le traitement de données étendu et la récupération d'ensembles complexes de données, le tout à partir de R.

Mise à jour : Il y a certains preuve que, au moins à un moment donné, que SET NAMES a été désactivé dans le pilote MySQL ODBC. Si vous êtes confiant, vous pouvez lire les caractères via un accès direct à la base de données (via mysql ou l'un des frontaux GUI de MySQL), alors vous pouvez essayer de répliquer ce que SET NAMES Est-ce que. Ce qui suit provient du manuel MySQL :

A SET NAMES 'x' statement is equivalent to these three statements:

SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;

Vous pouvez essayer d'exécuter ces trois instructions SQL à la place de SET NAMES et voyez si cela fonctionne.

Le même manuel documente également SET CHARACTER SET , qui peut être utilisé de la même manière que SET NAMES :

SET CHARACTER SET charset_name

SET CHARACTER SET est similaire à SET NAMES mais définit character_set_connection et collation_connection à character_set_database et collation_database . A SET CHARACTER SET x équivaut à ces trois instructions :

SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;

Définition de collation_connection définit également character_set_connection au jeu de caractères associé au classement (équivalent à l'exécution de SET character_set_connection = @@character_set_database ). Il n'est pas nécessaire de définir character_set_connection explicitement.

Vous pouvez essayer d'utiliser SET CHARACTER SET 'utf8' à la place.

Enfin, quel jeu de caractères/localisation utilisez-vous ? Il semble que vous soyez sous Windows - est-ce une locale UTF8 ? Je note également une certaine confusion dans votre Q. Vous dites que vous avez importé vos données vers MS Access, puis les avez exportées vers ODBC. Voulez-vous dire que vous l'avez exporté vers MySQL ? Je pensais qu'ODBC était un pilote de connexion pour permettre la communication avec/entre une gamme de bases de données, pas quelque chose que vous pouviez "exporter vers".

Vos données sont-elles vraiment dans MySQL ? Ne pourriez-vous pas vous connecter à MS Access via RODBC pour lire les données à partir de là ?

Si les données sont dans MySQL, essayez d'utiliser le package RMySQL pour vous connecter à la base de données et lire les données.