sql >> Database >  >> RDS >> Mysql

Hoe tekenset instellen voor MySQL in RODBC?

Ik ben niet bekend met ODBC en RODBC , maar mijn lezing van het bovenstaande documentatiefragment is dat SET NAMES 'utf8'; maakt deel uit van MySQL's SQL-dialect , dus u voert dat uit zoals u elke andere SQL-instructie zou uitvoeren die u zou kunnen gebruiken om gegevens uit uw database op te halen.

Iets als (niet getest):

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

waar myChannel is de verbindingshandle die wordt geretourneerd door odbcConnect() .

Is er een reden waarom u RODBC gebruikt via het RMySQL-pakket? Ik heb goede ervaring met het gebruik van RMySQL voor uitgebreide gegevensverwerking en het ophalen van complexe gegevenssets, allemaal vanuit R.

Bijwerken: Er is sommige bewijs dat, tenminste op een gegeven moment, dat SET NAMES is gedeactiveerd in het MySQL ODBC-stuurprogramma. Als je zeker bent, kun je de karakters lezen via directe toegang tot de database (via mysql of een van de GUI-frontends van MySQL), dan kunt u proberen te repliceren wat SET NAMES doet. Het volgende komt uit de MySQL-handleiding :

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;

Je zou kunnen proberen die drie SQL-instructies uit te voeren in plaats van SET NAMES en kijk of dat werkt.

Dezelfde handleiding documenteert ook SET CHARACTER SET , die op dezelfde manier kan worden gebruikt als SET NAMES :

SET CHARACTER SET charset_name

SET CHARACTER SET lijkt op SET NAMES maar stelt character_set_connection in en collation_connection naar character_set_database en collation_database . A SET CHARACTER SET x statement is gelijk aan deze drie statements:

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

collation_connection instellen stelt ook character_set_connection . in naar de tekenset die is gekoppeld aan de sortering (gelijk aan het uitvoeren van SET character_set_connection = @@character_set_database ). Het is niet nodig om character_set_connection in te stellen expliciet.

Je zou kunnen proberen met behulp van SET CHARACTER SET 'utf8' in plaats daarvan.

Tot slot, in welke tekenset / landinstelling gebruik je? Het lijkt erop dat u zich in Windows bevindt - is dit een UTF8-landinstelling? Ik constateer ook enige verwarring in uw vraag. U zegt dat u uw gegevens naar MS Access hebt geïmporteerd en deze vervolgens naar ODBC hebt geëxporteerd. Bedoel je dat je het naar MySQL hebt geëxporteerd? Ik dacht dat ODBC een verbindingsstuurprogramma was om communicatie met/tussen een reeks databases mogelijk te maken, niet iets waarnaar je zou kunnen "exporteren".

Staan je gegevens echt in MySQL? Kunt u geen verbinding maken met MS Access via RODBC om de gegevens vanaf daar te lezen?

Als de gegevens in MySQL staan, probeer dan het RMySQL-pakket te gebruiken om verbinding te maken met de database en de gegevens te lezen.



  1. Oracle Database Testing Challenge - Schemagegevens vergelijken

  2. mysql-opgeslagen procedure:het gebruik van gedeclareerde vars in een limietinstructie geeft een fout

  3. SetDate gebruiken in PreparedStatement

  4. QMYSQL-stuurprogramma laadfout