在DBI SQL Server ODBC连接中返回的数据库对象的缺少字母

问题描述 投票:0回答:1

[不幸的是,如果不共享我遇到问题的数据库的机密凭据,我将无法为该问题创建良好的副本。希望我下面有足够的信息来标记ODBC专家可以理解的任何明显问题。

背景

我正在运行具有以下规格的MacBook Pro:

  Model Name:       MacBook Pro
  Model Identifier: MacBookPro15,1
  Processor Name:   6-Core Intel Core i7
  Processor Speed:  2.6 GHz
  Number of Processors: 1
  Total Number of Cores:    6
  L2 Cache (per Core):  256 KB
  L3 Cache: 9 MB
  Hyper-Threading Technology:   Enabled
  Memory:   32 GB
  Boot ROM Version: 1037.0.78.0.0 (iBridge: 17.16.10572.0.0,0)

我的ODBC连接是使用FreeTDS按照指定的here设置的。

freetds.conf的相关部分如下:

# The POC SQL Server
[POC]
host = 172.22.238.154
port = 1433
tds version = 7.3

我的odbcinst.ini文件如下:

[FreeTDS]
Description=FreeTDS Driver for Linux & SQL Server 
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
UsageCount=1

我的odbc.ini文件指定如下:

[POC]
Description         = Connecton to Partners for our children SQL Server 
Driver              = FreeTDS
Servername          = POC

我正在尝试使用R中的以下连接信息(通过VPN)与SQL Server 2012数据库建立连接:

con <- DBI::dbConnect(odbc::odbc()
                  ,dsn = "POC"
                  ,uid = Sys.getenv("MSSQL_UN")
                  ,database = "CA_ODS"
                  ,pwd = Sys.getenv("MSSQL_PW"))

这将生成以下连接对象:

> con
  <OdbcConnection> POC2
  Database: CA_ODS
  Microsoft SQL Server Version: 11.00.7001

通常,此连接可以正常工作。我可以使用DBI::dbGetQuery(con, "select * from MyTable")dplyr::tbl(con, MyTable)等查询数据库,而不会出现问题。

问题

然而,RStudio仅显示数据库对象的所有其他字母,并在前几个字母后截断对象名称。以下屏幕截图应该可以很好地说明问题:

enter image description here

我尝试连接的数据库称为CA_ODS。但是,RStudio对象浏览器仅显示数据库名称的每个其他字母(即,数据库列为C_D)。

这似乎也不限于RStudio 本身。如上所述,尽管实际数据库查询的结果运行良好,但从INFORMATION_SCHEMA返回的名称似乎与对象浏览器中的信息匹配。下面,当直接从SQL Server Management Studio运行时,返回的TABLE_CATALOGCA_ODSTABLE_SCHEMAndacan,等等。但是,通过DB连接运行时,得到以下信息。

> DBI::dbGetQuery(con, "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE 
TABLE_SCHEMA='ndacan'")
   TABLE_CATALOG TABLE_SCHEMA      TABLE_NAME TABLE_TYPE
1            C_D          naa            f21v BASE TABLE

问题

关于如何在R或FreeTDS配置中重新指定ODBC连接以获取返回的数据库对象的全名的任何建议?

r sql-server odbc freetds r-dbi
1个回答
0
投票

如@ r2evans注释中所述,这似乎是在Mac上以R 3.6.0运行的odbc的问题。

通常,似乎可以通过从源odbc重新安装install.packages("odbc", type = 'source')来解决。

也如评论中所述,我最近将Mac升级到了Catalina。 从源代码安装odbc之前,我需要先从终端使用xcode-select --install重新安装XCode。

如下面的屏幕截图所示,我现在从odbc连接中获得了完整的对象名称显示。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.