2011-01-07 14 views
6

Estoy obteniendo datos del servidor MySql en R utilizando RODBC.
Así, en una columna de la base de datos es un vector de caracteresCadena RODBC que se truncó

SELECT MAX(CHAR_LENGTH(column)) FROM reqtable; 

RETURNS 26566

Ahora voy a mostrar un ejemplo de cómo estoy corriendo en el problema

`library(RODBC) 
con <- odbcConnect("mysqlcon") 
rslts <- as.numeric(sqlQuery(con, 
          "SELECT CHAR_LENGTH(column) FROM reqtable LIMIT 10", 
          as.is=TRUE)[,1]) 

` retornos

> rslts 
[1] 62 31 17 103 30 741 28 73 25 357 

, donde como rslts <- nchar(as.character(sqlQuery(con, "SELECT column FROM reqtable LIMIT 10", as.is=TRUE)[,1])) vuelve

> rslts 
[1] 62 31 17 103 30 255 28 73 25 255 

Así cuerdas con longitud> 255 quedan truncados en 255. ¿Hay alguna manera de obtener la cadena completa.

Gracias

+1

Esta pregunta me resolvió el problema: http://stackoverflow.com/questions/22366195/rodbc-sqlquery-returns-varchar255-when-it-should-return-varcharmax – bart

Respuesta

2

El controlador ODBC de PostgreSQL tiene una variable llamada MaxLongVarcharSize que he encontrado establecida en 8190 de forma predeterminada (la he usado tanto en Windows y Ubuntu). Es posible que el controlador ODBC de MySQL tenga una variable similar establecida en 255.

+0

¿Alguna idea de cómo buscarla y editarla? Supongo que es un problema similar –

+2

En Windows, seleccione su fuente de datos (en el Panel de control | Herramientas administrativas | Orígenes ODBC) y haga clic en configurar, luego seleccione el botón que dice origen de datos. La variable MaxLongVarCharSize está ahí. En Ubuntu agrega la línea MaxLongVarcharSize = 256000 (o lo que sea) a la fuente de datos relevante en el archivo/etc/odbc.ini. – MiG62

1

Usted podría tratar de usar otro conductor db tales como JDBC. En mi experiencia, esto algunas veces resolvió el problema.

prueba también el paquete de RMySQL (binarios actuales necesitan ser compilados. Si lo ponen en compilar tu mismo, solicita que por favor compartir con la comunidad)

Probablemente el origen del paquete RODBC "podría" proporcionar conocimientos en las limitaciones de longitud predeterminadas, si las hay. (No lo he visto todavía, pero pronto y publicaré una actualización aquí)

+0

Oye gracias, funciona perfectamente bien con un Conexión JDBC. Sin embargo, no está claro por qué no funciona correctamente con una conexión ODBC :( –

0

Otra posibilidad por la que el número recuperado de caracteres podría estar limitado es una restricción de comprobación de 'cordura' a 65535 bytes en el paquete RODBC mismo - as mentioned here.

Cuestiones relacionadas