Ich bin nicht vertraut mit ODBC und RODBC
, aber meine Lektüre des oben Schnipsel der Dokumentation ist, dass SET NAMES 'utf8';
SQL dialect Teil von MySQL ist, so dass Sie laufen, dass, wie Sie würde jede andere SQL-Anweisung, die Sie verwenden können Daten aus Ihrer Datenbank abrufen.
So etwas (nicht getestet):
sqlQuery(myChannel, query = "SET NAMES 'utf8';")
wo myChannel
wird die Verbindung durch odbcConnect()
zurück Griff.
Gibt es einen Grund, warum Sie RODBC über das RMySQL-Paket verwenden? Ich habe für umfangreiche Datenverarbeitung und den Abruf von komplexen Datensatz alle aus R.
aktualisiert gute Erfahrung mit RMySQL hat: Es gibt someevidence, dass zumindest an einem Punkt, dass SET NAMES
deaktiviert wurde im MySQL-ODBC-Treiber. Wenn Sie sicher sind, dass Sie die Zeichen über direkten Zugriff auf die Datenbank lesen können (über mysql
oder eines der GUI-Frontends von MySQL), könnten Sie versuchen, das zu replizieren, was SET NAMES
tut. Das Folgende ist aus den MySQL manual:
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;
Sie könnten versuchen, diese drei SQL-Anweisungen anstelle von SET NAMES
Ausführung und sehen, ob das funktioniert.
Das gleiche Handbuch auch Dokumente SET CHARACTER SET
, die in der gleichen Weise wie SET NAMES
verwendet werden können:
SET CHARACTER SET charset_name
SET CHARACTER SET
ist ähnlich SET NAMES
sondern setzt character_set_connection
und collation_connection
-character_set_database
und collation_database
. Eine SET CHARACTER SET x
Anweisung entspricht diese drei Aussagen:
SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;
Einstellen collation_connection
setzt auch c haracter_set_connection
auf den Zeichensatz mit dem zugeordneten Kollation (äquivalent zu der Ausführung SET character_set_connection = @@character_set_database
). Es ist nicht erforderlich, character_set_connection
explizit festzulegen.
Sie könnten stattdessen SET CHARACTER SET 'utf8'
verwenden.
Schließlich, in welchem Zeichensatz/in welcher Ländereinstellung laufen Sie? Es sieht so aus, als ob Sie auf Windows sind - ist das ein UTF8-Gebietsschema? Ich merke auch einige Verwirrung in Ihrem Q. Sie sagen, dass Sie Ihre Daten in MS Access importiert haben, und exportieren Sie es dann in ODBC. Meinst du, du hast es nach MySQL exportiert? Ich dachte, ODBC wäre ein Verbindungstreiber, um die Kommunikation mit/zwischen einer Reihe von Datenbanken zu ermöglichen, nicht etwas, zu dem man "exportieren" könnte.
Sind Sie wirklich Daten in MySQL? Könnten Sie sich nicht über RODBC mit MS Access verbinden, um die Daten von dort zu lesen?
Wenn sich die Daten in MySQL befinden, verwenden Sie das RMySQL-Paket, um eine Verbindung zur Datenbank herzustellen und die Daten zu lesen.
Dank, ich habe es versucht, aber es gibt mir dieses Ergebnis: [1] „42000 543 [MySQL] [ODBC 5.1-Treiber] [mysqld-5.0.67-community-nt] SET NAMES nicht durch den Fahrer erlaubt " [2]" [RODBC] FEHLER: Konnte nicht SQLExecDirect 'SET NAMES' utf8 ';' "' – lokheart
@lokheart - OK, das ** wenn ** am Anfang Ihres Schlüssels ist hier. Es scheint, zumindest für einige Versionen des MySQL ODBC-Treibers, dass 'SET NAMES' im Treiber nicht zulässig ist: http://bugs.mysql.com/bug.php?id=32596 An diesem Punkt müssen Sie möglicherweise nehmen Sie fachliche Beratung von der R-SIG-DB-Mailingliste. Ich schließe einige andere Optionen ein, um eine Aktualisierung der Antwort zu versuchen. Vielleicht möchten Sie auch die Versionen von MySQL, MySQL ODBC-Treiber, RODBC usw., die Sie verwenden, durchsuchen. –