linux - 如何使用 pyodbc/unixODBC 在 python3 中连接来自 Informix 数据库的选择数据

标签 linux python-3.x informix pyodbc unixodbc

我在使用 python3.5 和 pyodbc/unixODBC 从 Informix 数据库表中选择数据时遇到问题。

我有一个小的 py 文件 (ifx.py),其内容是:

import pyodbc
db=pyodbc.connect('DSN=Test1')
db.execute("SELECT * FROM customer ")

我得到一个错误:

pyodbc.Error: ('HY000', '[HY000] [Informix][Informix ODBC Driver]Invalid byte in codeset conversion input. (21000) (SQLExecDirectW)')

我所做的所有搜索都暗示与 LOCALE 设置有关,但我检查发现它们都设置相同:

CLIENT_LOCALE=en_US.819
DB_LOCALE=en_US.819
dbs_collate=en_US.819

如果我使用 unixODBC 'isql' 实用程序,我可以愉快地连接并查询数据。

版本信息。

unixODBC.x86_64 0:2.2.14-14.el6
pyodbc.version => '4.0.6'
Linux => Red Hat Enterprise Linux Server release 6.8 
python3.5 => Python 3.5.3 
Database => IBM Informix Dynamic Server Version 12.10.FC6X5 
ClientSDK => IBM Informix CSDK Version 4.10, IBM Informix-ESQL Version 4.10.FC6

环境变量 ODBCINI 指向/etc/odbc.ini。内容是:

[ODBC Data Sources]
Test1=IBM INFORMIX ODBC DRIVER
;
; Define ODBC Database Driver's Below - Driver Configuration Section
;
[Test1]
Driver=/opt/informix/lib/cli/iclis09b.so
Description=IBM INFORMIX ODBC DRIVER
Database=eunice
LogonID=
pwd=
Servername=indika_test
Port=9916
CursorBehavior=0
CLIENT_LOCALE=en_US.819
DB_LOCALE=en_US.819
TRANSLATIONDLL=/opt/informix/lib/esql/igo4a304.so

/etc/odbcinst.ini 内容:

[ODBC Drivers]
IBM INFORMIX ODBC DRIVER=Installed
[IBM INFORMIX ODBC DRIVER]
Driver=/opt/informix/lib/cli/iclit09b.so
Setup=/opt/informix/lib/cli/iclit09b.so
APILevel=1
ConnectFunctions=YYY
DriverODBCVer=03.51
FileUsage=0
SQLLevel=1
smProcessPerConnect=Y

odbcinst -j 的输出是

unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /etc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

在此先感谢您的任何帮助或建议。

最佳答案

这可能是由于客户表中的多字节字符无法从 UTF8 转换为 Latin 1, ISO 8859-1。即使在 CLIENT_LOCALE 和 DB_LOCALE 上设置了相同的代码,ODBC 客户端也会进行从 UTF-8 到 8859 的内部转换。如果有任何 2 字节字符(超过 extended-ascii 255 的字符),它们将不会转换为 Latin-1客户。我会查看客户表中的数据并确定有问题的数据。

关于linux - 如何使用 pyodbc/unixODBC 在 python3 中连接来自 Informix 数据库的选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263927/

相关文章:

linux - Raspberry Pi3 的 G-WAN?

linux - ansible 2.0.1 环境变量

python - 将帖子中提到的用户名作为个人资料链接返回到帖子内的这些用户

Python 错误 : "IndexError: string index out of range"

node.js - 使用 Node.JS 访问数据库 informix

sql - 在 PostgreSQL 中,列上可以有 "aliases"吗?

linux - ubuntu "No space left on device"但是有很多空间

linux - 在 visual studio 中在哪里执行 bash 命令?

python-3.x - 如何使用 Python 在 QTextEdit 中动态突出显示单词?

sql - informix 中的函数添加月份