sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo configurar charset para MySQL en RODBC?

No estoy familiarizado con ODBC y RODBC , pero mi lectura del fragmento de documentación anterior es que SET NAMES 'utf8'; es parte del dialecto SQL de MySQL , por lo que lo ejecuta como lo haría con cualquier otra instrucción SQL que pueda usar para recuperar datos de su base de datos.

Algo como (no probado):

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

donde myChannel es el identificador de conexión devuelto por odbcConnect() .

¿Hay alguna razón por la que esté usando RODBC sobre el paquete RMySQL? He tenido una buena experiencia en el uso de RMySQL para el procesamiento extenso de datos y la recuperación de conjuntos de datos complejos, todo desde R.

Actualización: Hay algunos evidencia que, al menos en un punto, que SET NAMES se ha desactivado en el controlador ODBC de MySQL. Si está seguro de que puede leer los caracteres a través del acceso directo a la base de datos (a través de mysql o una de las interfaces gráficas de usuario de MySQL), entonces podría intentar replicar lo que SET NAMES hace. Lo siguiente es del manual de 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;

Podría intentar ejecutar esas tres declaraciones SQL en lugar de SET NAMES y ver si eso funciona.

El mismo manual también documenta SET CHARACTER SET , que se puede usar de la misma manera que SET NAMES :

SET CHARACTER SET charset_name

SET CHARACTER SET es similar a SET NAMES pero establece character_set_connection y collation_connection a character_set_database y collation_database . A SET CHARACTER SET x declaración es equivalente a estas tres declaraciones:

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

Configuración de collation_connection también establece character_set_connection al juego de caracteres asociado con la intercalación (equivalente a ejecutar SET character_set_connection = @@character_set_database ). No es necesario configurar character_set_connection explícitamente.

Podría intentar usar SET CHARACTER SET 'utf8' en su lugar.

Finalmente, ¿en qué conjunto de caracteres / configuración regional se está ejecutando? Parece que está en Windows:¿es esta una configuración regional UTF8? También observo cierta confusión en su P. Dice que importó sus datos a MS Access y luego los exportó a ODBC. ¿Quieres decir que lo exportaste a MySQL? Pensé que ODBC era un controlador de conexión para permitir la comunicación con/entre un rango de bases de datos, no algo que pudieras "exportar".

¿Están sus datos realmente en MySQL? ¿No podría conectarse a MS Access a través de RODBC para leer los datos desde allí?

Si los datos están en MySQL, intente usar el paquete RMySQL para conectarse a la base de datos y leer los datos.