Mysql
 sql >> Database >  >> RDS >> Mysql

Come impostare il set di caratteri per MySQL in RODBC?

Non ho familiarità con ODBC e RODBC , ma la mia lettura del frammento di documentazione di cui sopra è che SET NAMES 'utf8'; fa parte del dialetto SQL di MySQL , quindi lo esegui come faresti con qualsiasi altra istruzione SQL che potresti utilizzare per recuperare i dati dal tuo database.

Qualcosa come (non testato):

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

dove myChannel è l'handle di connessione restituito da odbcConnect() .

C'è un motivo per cui stai usando RODBC sul pacchetto RMySQL? Ho avuto una buona esperienza nell'uso di RMySQL per l'elaborazione estensiva dei dati e il recupero di insiemi complessi di dati, il tutto dall'interno di R.

Aggiornamento: Ci sono alcuni prove che, almeno in un punto, quel SET NAMES è stato disattivato nel driver MySQL ODBC. Se sei sicuro puoi leggere i caratteri tramite l'accesso diretto al database (tramite mysql o uno dei front-end della GUI di MySQL), allora potresti provare a replicare ciò che SET NAMES fa. Quanto segue è tratto dal manuale 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;

Potresti provare a eseguire queste tre istruzioni SQL al posto di SET NAMES e vedi se funziona.

Lo stesso manuale documenta anche SET CHARACTER SET , che può essere utilizzato allo stesso modo di SET NAMES :

SET CHARACTER SET charset_name

SET CHARACTER SET è simile a SET NAMES ma imposta character_set_connection e collation_connection a character_set_database e collation_database . A SET CHARACTER SET x istruzione è equivalente a queste tre affermazioni:

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

Impostazione di collation_connection imposta anche character_set_connection al set di caratteri associato alle regole di confronto (equivalente all'esecuzione di SET character_set_connection = @@character_set_database ). Non è necessario impostare character_set_connection esplicitamente.

Potresti provare a usare SET CHARACTER SET 'utf8' invece.

Infine, quale set di caratteri/località stai utilizzando? Sembra che tu sia su Windows:è una localizzazione UTF8? Noto anche una certa confusione nella tua Q. Dici di aver importato i tuoi dati in MS Access e quindi di esportarli in ODBC. Vuoi dire che l'hai esportato su MySQL? Pensavo che ODBC fosse un driver di connessione per consentire la comunicazione con/tra una gamma di database, non qualcosa in cui potresti "esportare".

I tuoi dati sono davvero in MySQL? Non potresti connetterti a MS Access tramite RODBC per leggere i dati da lì?

Se i dati sono in MySQL, prova a usare il pacchetto RMySQL per connetterti al database e leggere i dati.