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

Hvordan indstilles tegnsæt til MySQL i RODBC?

Jeg er ikke bekendt med ODBC og RODBC , men min læsning af ovenstående uddrag af dokumentation er, at SET NAMES 'utf8'; er en del af MySQL's SQL-dialekt , så du kører det som enhver anden SQL-sætning, som du kan bruge til at hente data fra din database.

Noget i stil med (ikke testet):

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

hvor myChannel er forbindelseshåndtaget returneret af odbcConnect() .

Er der en grund til, at du bruger RODBC over RMySQL-pakken? Jeg har haft god erfaring med at bruge RMySQL til omfattende databehandling og hentning af komplekse datasæt alt sammen inde fra R.

Opdatering: Der er nogle bevis at, i det mindste på et tidspunkt, at SET NAMES er blevet deaktiveret i MySQL ODBC-driveren. Hvis du er sikker på, kan du læse tegnene via direkte adgang til databasen (via mysql eller en af ​​MySQL's GUI-frontends), så kan du prøve at replikere hvad SET NAMES gør. Følgende er fra MySQL-manualen :

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;

Du kan prøve at udføre disse tre SQL-sætninger i stedet for SET NAMES og se om det virker.

Den samme manual dokumenterer også SET CHARACTER SET , som kan bruges på samme måde som SET NAMES :

SET CHARACTER SET charset_name

SET CHARACTER SET ligner SET NAMES men indstiller character_set_connection og collation_connection til character_set_database og collation_database . Et SET CHARACTER SET x udsagn svarer til disse tre udsagn:

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

Indstilling af collation_connection indstiller også character_set_connection til det tegnsæt, der er knyttet til sorteringen (svarende til at udføre SET character_set_connection = @@character_set_database ). Det er ikke nødvendigt at indstille character_set_connection eksplicit.

Du kan prøve at bruge SET CHARACTER SET 'utf8' i stedet.

Til sidst, hvilket tegnsæt/lokalitet kører du i? Det ser ud til, at du er på Windows - er dette en UTF8-lokalitet? Jeg bemærker også en vis forvirring i dit spørgsmål. Du siger, at du har importeret dine data til MS Access, og derefter eksporterer det til ODBC. Mener du, at du eksporterede det til MySQL? Jeg troede, at ODBC var en forbindelsesdriver til at tillade kommunikation med/mellem en række databaser, ikke noget du kunne "eksportere til".

Er du data virkelig i MySQL? Kunne du ikke oprette forbindelse til MS Access via RODBC for at læse dataene derfra?

Hvis dataene er i MySQL, kan du prøve at bruge RMySQL-pakken til at oprette forbindelse til databasen og læse dataene.



  1. MYSQL importerer data fra csv ved hjælp af LOAD DATA INFILE

  2. Længde af tabelkommentarer i MySQL

  3. Migrering fra Postgres til SQL Server 2008

  4. Mysql-forespørgsel til dynamisk at konvertere rækker til kolonner på basis af to kolonner