Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie setze ich den Zeichensatz für MySQL in RODBC?

Ich bin mit ODBC und RODBC nicht vertraut , aber ich habe den obigen Dokumentationsausschnitt so gelesen, dass SET NAMES 'utf8'; ist Teil des SQL-Dialekts von MySQL , also führen Sie das wie jede andere SQL-Anweisung aus, die Sie verwenden könnten, um Daten aus Ihrer Datenbank abzurufen.

Etwas wie (nicht getestet):

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

wobei myChannel ist das von odbcConnect() zurückgegebene Verbindungs-Handle .

Gibt es einen Grund, warum Sie RODBC über das RMySQL-Paket verwenden? Ich habe gute Erfahrungen mit der Verwendung von RMySQL für die umfangreiche Datenverarbeitung und den Abruf komplexer Datensätze innerhalb von R gemacht.

Aktualisierung: Es gibt einige Beweise dass, zumindest an einem Punkt, dass SET NAMES wurde im MySQL-ODBC-Treiber deaktiviert. Wenn Sie sich sicher sind, können Sie die Zeichen über einen direkten Zugriff auf die Datenbank (über mysql) lesen oder eines der GUI-Frontends von MySQL), dann könnten Sie versuchen, SET NAMES zu replizieren tut. Das Folgende stammt aus dem MySQL-Handbuch :

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 auszuführen und sehen, ob das funktioniert.

Dasselbe Handbuch dokumentiert auch SET CHARACTER SET , die genauso verwendet werden können wie SET NAMES :

SET CHARACTER SET charset_name

SET CHARACTER SET ähnelt SET NAMES setzt aber character_set_connection und collation_connection zu character_set_database und collation_database . Ein SET CHARACTER SET x -Anweisung entspricht diesen drei Anweisungen:

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

Einstellen von collation_connection setzt auch character_set_connection auf den mit der Sortierung verknüpften Zeichensatz (entspricht der Ausführung von SET character_set_connection = @@character_set_database ). character_set_connection muss nicht gesetzt werden explizit.

Sie könnten versuchen, SET CHARACTER SET 'utf8' zu verwenden stattdessen.

Schließlich, in welchem ​​​​Zeichensatz / Gebietsschema laufen Sie? Es sieht so aus, als ob Sie Windows verwenden - ist dies ein UTF8-Gebietsschema? Ich stelle auch einige Verwirrung in Ihrer Frage fest. Sie sagen, Sie haben Ihre Daten in MS Access importiert und dann nach ODBC exportiert. Meinst du, du hast es nach MySQL exportiert? Ich dachte, ODBC sei ein Verbindungstreiber, um die Kommunikation mit/zwischen einer Reihe von Datenbanken zu ermöglichen, nicht etwas, in das man "exportieren" könne.

Sind Ihre Daten wirklich in MySQL? Konnten Sie sich nicht über RODBC mit MS Access verbinden, um die Daten von dort zu lesen?

Wenn sich die Daten in MySQL befinden, versuchen Sie, das RMySQL-Paket zu verwenden, um eine Verbindung zur Datenbank herzustellen und die Daten zu lesen.