informix数据库的编码为en_US.819,在用python进行select时会有报错,所以在odbc创建数据库连接之后要进行编码设置!
Python连接informix的编码报错
Error: ('HY000', '[HY000] [Informix][Informix ODBC Driver]Invalid byte in codeset conversion input. (21000) (SQLExecDirectW)')
In [1]: import sys,pyodbc
In [2]: conn = pyodbc.connect('DSN=piccxt;pwd=picc1234')
In [3]: cr = conn.cursor()
In [4]: cr.execute("select first 2 startdate from prpxbtd")
---------------------------------------------------------------------------
Error Traceback (most recent call last)
<ipython-input-4-3aafa21fc670> in <module>()
----> 1 cr.execute("select first 2 startdate from prpxbtd")
Error: ('HY000', '[HY000] [Informix][Informix ODBC Driver]Invalid byte in codeset conversion input. (21000) (SQLExecDirectW)')
In [5]: conn.setdecoding(pyodbc.SQL_WCHAR, encoding='UTF-8')
In [6]: conn.setdecoding(pyodbc.SQL_CHAR, encoding='UTF-8')
In [7]: conn.setencoding(encoding='UTF-8')
In [8]: cr.execute("select first 2 startdate from prpxbtd")
Out[8]: <pyodbc.Cursor at 0x7f8403e736c0>
In [9]: row = cr.fetchall()
In [10]: for i in row:
...: print(i)
...:
(datetime.date(2018, 11, 25), )
(datetime.date(2018, 10, 19), )
In [11]: conn.close()