Cómo escapar de caracteres especiales en la contraseña de la cadena de conexión RODBC

2020-06-30 r shiny rodbc

Tengo una base de datos SQL Server a la que me puedo conectar con mi usuario y esta contraseña: "testspecialcharacters_¤" a través de MS Studio sin problemas. Estamos utilizando la autenticación de Windows para conectarse al servidor.

Sin embargo, no puedo conectarme a él a través de mi aplicación R Shiny. No puedo dar el servidor exacto, la base de datos y los nombres de usuario, pero esto está muy cerca del código que estoy usando:

library(RODBCext)
ch <- odbcDriverConnect("DSN=test;database=test_db;UID=test_user;PWD=testspecialcharacters_¤")
data <- sqlQuery(ch,"select * from test_db.general.test_tbl")

Recibo el siguiente error:

[RODBC] ERROR: state 42000, code 18452, message [unixODBC][FreeTDS][SQL Server]Login failed. The login is from an untrusted domain and cannot be used with Windows authentication.
[RODBC] ERROR: state 08001, code 0, message [unixODBC][FreeTDS][SQL Server]Unable to connect to data source
ODBC connection failed

Tengo que mencionar que el mismo código funciona para contraseñas sin ese carácter especial. Por experiencia hemos descubierto que "-" y "!" parece funcionar Sin embargo, "@" y "¤" no funcionan. No hemos probado todos los posibles caracteres especiales, solo estos pocos.

Basado en otras publicaciones en línea, he intentado lo siguiente, sin éxito:

ch <- odbcDriverConnect("DSN=test;database=test_db;UID=test_user;PWD=testspecialcharacters_¤", DBMSencoding = "UTF-8")
ch <- odbcDriverConnect("DSN=test;database=test_db;UID=test_user;PWD=testspecialcharacters_¤", DBMSencoding = "UTF-8-BOM")
ch <- odbcDriverConnect("DSN=test;database=test_db;UID=test_user;PWD=testspecialcharacters_¤", DBMSencoding = "latin1")
ch <- odbcDriverConnect("DSN=test;database=test_db;UID=test_user;PWD={testspecialcharacters_¤}")
ch <- odbcDriverConnect("DSN=test;database=test_db;UID=test_user;PWD='testspecialcharacters_¤'")

Estoy usando RStudio Pro con codificación predeterminada UTF-8.

¿Alguien sabe cómo escapar de los caracteres especiales utilizados en la cadena de contraseña? O si se necesita una forma diferente de conectarse a la base de datos.

Answers

La mejor manera es usar un escape básico como este. Pero debe probarlo en su máquina, porque configurar la codificación correcta entre su máquina y la base de datos es realmente difícil.

x <- "¤"


y <- "\u00A4"

identical(x, y) # true

Y enlace para mesa https://www.utf8-chartable.de/

Related