Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pydbc通过ODBC连接返回字符串值中每个字母之间的空字符_Python_Odbc_Pyodbc_Vertica - Fatal编程技术网

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

Python pydbc通过ODBC连接返回字符串值中每个字母之间的空字符,python,odbc,pyodbc,vertica,Python,Odbc,Pyodbc,Vertica,我有一个最奇怪的问题。 我正在通过ODBC连接到Vertica数据库使用pyodbc 4.0.30版本 在MAC上也使用python 2.7版 我插入字符串值,例如:“daniel”,当执行select时,我得到一个每个字母之间都有空字符的值 这是我的odbc.ini文件 [ODBC Data Sources] vertica = Vertica [vertica] Driver = /Library/Vertica/ODBC/lib/libverticaod

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

在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]

而不是

[49100115102115100102]

尝试了所有DriverStringConversions配置,但没有任何更改。
我知道这很难实现,但你知道为什么会发生这种情况吗?

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

导出ODBCSTACK=$HOME/ODBCSTACK 导出ODBCHOME=$ODBCSTACK/uodbc 导出ODBCSYSINI=$ODBCHOME/etc 导出ODBCINI=$ODBCSYSINI/odbc.ini 导出VERTICAINI=$ODBCSYSINI/vertica.ini 加上一些LD_LIBRARY_路径和路径设置 我的vertica.ini如下所示:

[司机] Locale=en_US ODBCInstLib=/home/dbadmin/odbcstack/uodbc/lib/libodbcinst.so ErrorMessagesPath=/opt/vertica DriverManager编码=UTF-16 LogPath=/tmp 日志名称空间= 日志级别=0 如果没有vertica.ini,我就不会从vertica收到任何明显的错误消息,字符编码可能会欺骗我


试试看

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

导出ODBCSTACK=$HOME/ODBCSTACK 导出ODBCHOME=$ODBCSTACK/uodbc 导出ODBCSYSINI=$ODBCHOME/etc 导出ODBCINI=$ODBCSYSINI/odbc.ini 导出VERTICAINI=$ODBCSYSINI/vertica.ini 加上一些LD_LIBRARY_路径和路径设置 我的vertica.ini如下所示:

[司机] Locale=en_US ODBCInstLib=/home/dbadmin/odbcstack/uodbc/lib/libodbcinst.so ErrorMessagesPath=/opt/vertica DriverManager编码=UTF-16 LogPath=/tmp 日志名称空间= 日志级别=0 如果没有vertica.ini,我就不会从vertica收到任何明显的错误消息,字符编码可能会欺骗我


试试看

看起来您需要调整编码设置。详细信息。看起来您需要调整编码设置。细节。