如何转义 RODBC 连接字符串密码中的特殊字符

Posted

技术标签:

【中文标题】如何转义 RODBC 连接字符串密码中的特殊字符【英文标题】:How to escape special characters in RODBC connection string password 【发布时间】:2020-06-30 06:35:17 【问题描述】:

我有一个 SQL Server 数据库,我可以通过 MS Studio 连接到我的用户和这个密码:“testspecialcharacters_¤”,没有问题。我们正在使用 windows 身份验证连接到服务器。

但是我无法通过我的 R Shiny 应用程序连接到它。我无法给出确切的服务器、数据库和用户名,但这与我使用的代码非常接近:

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

我收到以下错误:

[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

我必须提到,相同的代码适用于没有该特殊字符的密码。根据经验,我们发现“-”和“!”似乎工作。但是“@”和“¤”不起作用。我们没有尝试所有可能的特殊字符,只有这几个。

根据网上的其他帖子,我尝试了以下方法,但没有成功:

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_¤'")

我正在使用带有 UTF-8 默认编码的 RStudio Pro。

有人知道如何转义密码字符串中使用的特殊字符吗?或者,如果需要其他方式连接到数据库。

【问题讨论】:

【参考方案1】:

最好的方法是像这样使用基本的转义。但是你必须在你的机器上测试它,因为在你的机器和数据库之间设置正确的编码真的很难。

x <- "¤"


y <- "\u00A4"

identical(x, y) # true

还有表格链接 https://www.utf8-chartable.de/

【讨论】:

您好,谢谢您的建议,我刚刚尝试过,但这似乎也行不通。我已将连接字符串更改为 ch

以上是关于如何转义 RODBC 连接字符串密码中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

连接字符串出错,如何将 Prisma 连接到 Azure SQL 数据库

RODBC - 连接字符串添加用户名和密码

SQLPlus:在脚本中使用特殊字符作为密码

数据库内容正常,取出来特殊字符乱码,如何解决

特殊字符和 RODBC

如何在mysql数据库中鎒moji特殊字符