我使用pyodbc连接到Vertica。 我已经安装了Vertica驱动程序,unixodbc和pyodbc。
现在我遇到了executinq unicode查询的问题。
con = pyodbc.connect('Driver={driver};Servername={server};Port={port};Database={db};UserName={user};password={password}'.format(...))
cur = con.cursor()
cur.execute('SELECT * FROM table') # It works
cur.execute(u'SELECT * FROM table') # It fails
错误是:
ProgrammingError: ('42601', '[42601] ERROR 4856: Syntax error at or near " (4856) (SQLExecDirectW)')
答案 0 :(得分:1)
看起来vertica.ini
文件中定义的错误编码(locale
中的错误odbc.ini
设置)
vertica.ini
[Driver]
DriverManagerEncoding=UTF-16
...
odbc.ini
...
Locale = en_US@collation=binary
...
我打赌vertica.ini
。我没有要检查的MacOS,但是通过文档,您需要定义UTF-32
。您可以发布vertica.ini
abd odbc.ini
+数据库区域设置吗?
daniel=> show locale;
name | setting
--------+--------------------------------------
locale | en_US@collation=binary (LEN_KBINARY)
(1 row)
有关详细信息,请阅读here。
答案 1 :(得分:0)
您使用的是什么版本的pyodbc和python?什么OS?
尝试在你的python代码中使用第一行# - - 编码:utf-8 - - ?
并更新pyodbc sudo pip install --upgrade pyodbc