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.iniodbc.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

MySQL 太长 varchar 截断/错误设置

SqlBulkCopy 截断 VARCHAR(MAX) 列中的字符串

当保存到 SQL Server 到 varchar(255) 时,RODBC::sqlsave() 会截断 DF 中的 col

使用 12c 客户端截断的存储过程 OUTPUT VARCHAR2 值

第十章 创建计算字段