我有一个最奇怪的问题,我使用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配置,但没有任何改变.我知道这是一个长镜头,但任何想法为什么会发生这种情况?
这看起来像是一个编码问题。你似乎得到的是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收到任何合理的错误信息,而且字符编码会对我产生影响。
试试吧