pydbc通过ODBC连接在字符串值的每个字母之间返回空字符。

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

我有一个最奇怪的问题,我使用pyodbc 4.0.30版本通过ODBC连接到Vertica数据库。

在MAC上也使用python 2.7版本。

例如,我插入字符串值。'daniel'当进行select时,我得到一个在每个字母之间有空字符的值。

这是我的odbc.ini文件

[ODBC Data Sources]
vertica = Vertica

[vertica]
Driver                  = /Library/Vertica/ODBC/lib/libverticaodbc.dylib
Database                = qa
ServerName              = serverName
Port                    = 5433
UID                     = dbadmin
PWD                     = pass
DriverStringConversions = NONE
ColumnsAsChar = true

[ODBC]
Trace         = 0
TraceAutoStop = 0
TraceFile     = /Users/daniel/sql.log
TraceDLL      = 

字符串的返回值应该是'Daniel',而我得到了以下的ascii值。

[49, 0, 100, 0, 115, 0, 102, 0, 115, 0, 100, 0, 102, 0]

而不是

[49,100,115,102,115,100,102]

尝试了所有的DriverStringConversions配置,但没有任何改变.我知道这是一个长镜头,但任何想法为什么会发生这种情况?

python odbc pyodbc vertica
1个回答
1
投票

这看起来像是一个编码问题。你似乎得到的是UTF-16LE而不是UTF-8。为了让我的Vertica字符串来回正确,我在使用ODBC对Vertica调用任何程序之前,都有这样的配置。

export ODBCSTACK=$HOME/odbcstack
export ODBCHOME=$ODBCSTACK/uodbc
export ODBCSYSINI=$ODBCHOME/etc
export ODBCINI=$ODBCSYSINI/odbc.ini
export VERTICAINI=$ODBCSYSINI/vertica.ini
# plus a few LD_LIBRARY_PATH and PATH settings

而我的 vertica.ini 看起来是这样的。

[Driver]
Locale = en_US
ODBCInstLib = /home/dbadmin/odbcstack/uodbc/lib/libodbcinst.so
ErrorMessagesPath = /opt/vertica
DriverManagerEncoding = UTF-16
LogPath = /tmp
LogNameSpace =
LogLevel = 0

没有 vertica.ini我没有从Vertica收到任何合理的错误信息,而且字符编码会对我产生影响。

试试吧

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