【问题标题】:pydbc via ODBC connection return null character between each letter in string valuepydbc 通过 ODBC 连接返回字符串值中每个字母之间的空字符
【发布时间】:2020-06-14 19:02:19
【问题描述】:

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

在 MAC 上也使用 python 2.7 版。

我正在插入字符串值,例如:'daniel',在进行选择时,我得到一个每个字母之间包含空字符的值。

这是我的 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 配置,但没有任何改变。 我知道这是一个很长的尝试,但是您知道为什么会发生这种情况吗?

【问题讨论】:

  • 看来您需要调整编码设置。详情here.

标签: python odbc pyodbc vertica


【解决方案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 收到任何明智的错误消息,而且字符编码会欺骗我。

试试看!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-18
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    相关资源
    最近更新 更多