es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo encontrar una forma de recopilar datos y cargarlos nuevamente en un servidor SQL diferente sin romper la codificación R/dbPlyr/DBI.

La configuración básica es que me conecto a una base de datos A, obtengo algunos datos de vuelta a R, y los escribo en otra conexión, base de datos B.

La base de datos es SQLLatin1GeneralCP1CI_AS y estoy utilizando la codificación = “windows-1252” en las conexiones A y B.

La visualización en RStudio es correcta, los caracteres especiales se muestran como deberían.

Cuando intento escribir los datos, obtengo un “No se puede insertar el valor NULL en la columna”.

Lo reduje al menos a un campo que causa el problema: una celda con un símbolo PHI.

¿Cómo puedo hacer para que el símbolo PHI y presumiblemente otros caracteres especiales se mantengan iguales desde la fuente hasta el destino?

conA <- dbConnect(odbc(), 
                Driver = "ODBC Driver 17 for SQL Server",
                Server = "DB",
                Database = "serverA",
                Trusted_connection = "yes",
                encoding = "1252")

dbWriteTable(conB,SQL("schema.table"),failing_row, append = T)
#Esto causa el error "no se puede insertar un valor nulo"
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema probablemente se debe a que la codificación no se conserva al escribir los datos de la base de datos A en la base de datos B. Para asegurarte de que no se pierdan los caracteres especiales, puedes probar lo siguiente:

    1. Utiliza la misma codificación (windows-1252) para las conexiones A y B.
    2. Especifica explícitamente la codificación al escribir los datos en la base de datos B utilizando la función dbWriteTable(). Puedes hacer esto agregando el argumento encoding = "windows-1252" a la llamada de la función.

    Aquí tienes un ejemplo de cómo puedes modificar tu código para preservar la codificación:

    “`{r}
    conA <- dbConnect(odbc(),
    Driver = “ODBC Driver 17 for SQL Server”,
    Server = “DB”,
    Database = “serverA”,
    Trusted_connection = “yes”,
    encoding = “windows-1252”)

    conB <- dbConnect(odbc(),
    Driver = “ODBC Driver 17 for SQL Server”,
    Server = “DB”,
    Database = “serverB”,
    Trusted_connection = “yes”,
    encoding = “windows-1252”)

    Especifica la codificación al escribir en la base de datos B

    dbWriteTable(conB, SQL(“schema.table”), failing_row, append = TRUE, encoding = “windows-1252”)
    “`

    Al utilizar la misma codificación para las conexiones A y B, y al especificar la codificación al escribir los datos en la base de datos B, deberías poder conservar los caracteres especiales como el símbolo PHI.

Comments are closed.