尝试使用 Python 连接 DB2 上的表时出错 (SQL0332N)

Posted

技术标签:

【中文标题】尝试使用 Python 连接 DB2 上的表时出错 (SQL0332N)【英文标题】:Error while try to connect table on DB2 using Python (SQL0332N) 【发布时间】:2020-12-01 08:13:27 【问题描述】:

我正在使用 Python 3.7 连接到 DB2-LUW 数据库,并且一些查询出现错误:“SQL0332N 不支持从源代码页“1252”到目标代码页“874”的字符转换。***”。

首先我尝试通过重新创建一个新表来测试 Python 与 DB2 上数据库的连接。

我插入 1 条记录并将其读回。当我读取插入的行时,我得到了错误。

交互式 python 的结果:

import ibm_db_dbi as dbi

print(dbi.__version__)
3.0.2

conn = dbi.connect("DATABASE=<db>;HOSTNAME=<hostname>;PORT=<port>;PROTOCOL=TCPIP;UID=<user>;PWD=<pwd>;", "", "")

c = conn.cursor()

c.execute('create table ibm_db_tst (col1 int)')
Out[5]: True

c.execute('insert into ibm_db_tst values(2)')
Out[6]: True

c.execute('select col1 from ibm_db_tst')
Out[7]: True

print(c.fetchone())

Traceback(最近一次调用最后一次):

文件 "C:\Users\2400566\Anaconda3\lib\site-packages\ibm_db_dbi.py", 第 1449 行,在 _fetch_helper 中 行 = ibm_db.fetch_tuple(self.stmt_handler)

SQLCODE=-332lumn 信息无法检索:[IBM][CLI Driver][DB2/NT64] SQL0332N 字符转换来自源代码 不支持将页面“1252”转换为目标代码页“874”。

在处理上述异常的过程中,又发生了一个异常:

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在 打印(c.fetchone())

文件“C:\Users\2400566\Anaconda3\lib\site-packages\ibm_db_dbi.py”,第 1475 行,在 fetchone row_list = self._fetch_helper(1)

文件“C:\Users\2400566\Anaconda3\lib\site-packages\ibm_db_dbi.py”,第 1456 行,在 _fetch_helper raise self.messages[len(self.messages) - 1]

SQLCODE=-332_dbi::Error: [IBM][CLI Driver][DB2/NT64] SQL0332N 从源代码页“1252”到目标代码页“874”的字符转换不是支持。

我不知道出了什么问题?需要建议。

我的 Python 版本是在 Window 10 PC x64 上运行的 Python 3.7.7

DB2 在 Windows server 2012 x64 上。

DB2 版本为 DB2 v11.1.0.1527。

数据库区域:GB 数据库代码页:1252 数据库代码集:1252 数据库国家/地区代码:44

提前致谢。

【问题讨论】:

问题是您的数据库有一个代码页和另一个环境,驱动程序不知道如何在它们之间进行转换。 874 似乎是 ISO 8859-11,似乎与泰语有关。这是故意的吗? 请创建(或更改)系统环境变量 DB2CODEPAGE 并将其值设置为 1208。您可能需要重新启动您的 Windows 工作站。然后重试python脚本。您还应该提及您的 python 版本和位数,以及确切的 Windows 版本和位数。 @Lennart,我不确定是不是故意的?需要与帮助我设置此数据库的 IT 人员确认。 @mao ,我的 Python 版本是 Python 3.7.7,在 Window 10 PC x64 上运行,DB2 在 Windows server 2012 x64 上,DB2 版本是 DB2 v11.1.0.1527。我会尝试更改 DB2CODEPAGE @mao 我还有 1 个问题,为什么这个问题只发生在 Python 上?从同一个窗口 10 Pc 如果连接到这个 DB2,我可以使用 SQLworkbench/J 创建表插入更新表。任何建议,为什么只有 Python 是依赖项。 【参考方案1】:

如果您的 python 脚本使用 db2dsdriver 连接到服务器上的数据库,请尝试将 DisableUnicode 关键字设置为 0 以在 Windows 上强制执行 unicode 代码页(即 1208)。

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.swg.im.dbclient.config.doc/doc/r0054636.html

【讨论】:

以上是关于尝试使用 Python 连接 DB2 上的表时出错 (SQL0332N)的主要内容,如果未能解决你的问题,请参考以下文章

尝试将记录添加到具有先前创建的记录的表时出错

sqlserver 链接服务器 连接db2 查询速度慢

尝试打开已链接到 Share Point with Access 2013 的表时,Access 2007 出错

使用 DB2 语法截断 H2Database 中的表

ORA-00942: 写入数据库中的表时表或视图不存在错误

org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:FROM,当尝试删除与自身连接的表时