ODBC 截断 varchar 字段
Posted
技术标签:
【中文标题】ODBC 截断 varchar 字段【英文标题】:ODBC truncating varchar fields 【发布时间】:2018-01-23 00:58:14 【问题描述】:使用包 ODBC 连接到 vertica (MAC OSX)。我已经使用 ODBC 驱动程序和 DBI 包连接到 vertica 数据库。我能够连接到数据库。来自查询结果的 varchar 字段被截断,而其他字段被正确检索。
library(RODBC)
library(DBI)
default_vertica_database <- 'dsciasda01'
default_vertica_user <- 'sadasdy'
default_vertica_pass <- 'sadasds'
default_vertica_port <- 5433
default_vertica_hosts <- 'vsadasdz-vip.adas.sadasda.com'
vertica_driver <- default_vertica_driver
vertica_database <- default_vertica_database
vertica_port <- default_vertica_port
vertica_host <- default_vertica_host
vertica_user <- default_vertica_user
vertica_pass <- default_vertica_pass
vertica_driver <- '/Library/Vertica/ODBC/lib/libverticaodbc.dylib'
#connect to vertica
vth <- dbConnect(odbc::odbc(),
driver = vertica_driver,
database = vertica_database,
uid = vertica_user,
pwd = vertica_pass,
host = vertica_host,
port = vertica_port
)
pool_list<<-dbGetQuery(vth, "Select * from table0.table_current limit 10")
varchar 字段被截断。如果存在长度为 64 的字段,则仅检索字符串中的第一个字符。
【问题讨论】:
你能发布你的vertica.ini
和odbc.ini
文件吗?需要有关您的环境的更多信息。顺便说一句:不推荐 ODBC 驱动程序(根据我的经验)
在 macOS High Sierra 上运行它。 vertica.ini --[Driver] ErrorMessagesPath=/Library/Vertica/ODBC/messages/ ODBCInstLib=/usr/lib/libiodbcinst.dylib DriverManagerEncoding=UTF-32 我的 odbc.ini 文件是空的。
是iODBC
吗?看起来像是编码或驱动程序管理器字符对话的问题。
我该如何解决这个问题?看起来是 iODBC
我们需要确定iODBC
有问题。使用isql
测试您的查询。如果isql
截断字符-iODBC
中的问题;如果不是 - 驱动程序配置中的问题。
【参考方案1】:
可能相关——使用ODBC连接亚马逊的Redshift,发现需要在连接中设置MaxLongVarcharSize参数:
con <- dbConnect(odbc::odbc(),
driver = "Amazon Redshift Driver",
database = "xx",
uid = "yy",
pwd = "zz",
locale="en-US",
host = "aa",
port = 5439,
MaxLongVarcharSize = 8190)
h/tRODBC string getting truncated
【讨论】:
以上是关于ODBC 截断 varchar 字段的主要内容,如果未能解决你的问题,请参考以下文章
RODBC 不会从数据框中保存超过 8k 的 varchar/text
SqlBulkCopy 截断 VARCHAR(MAX) 列中的字符串
当保存到 SQL Server 到 varchar(255) 时,RODBC::sqlsave() 会截断 DF 中的 col