gpt4 book ai didi

java - 不支持的字符集异常 : Cp1027 with DB2 JDBC Driver

转载 作者:行者123 更新时间:2023-12-01 18:06:03 28 4
gpt4 key购买 nike

我正在通过 JDBC 客户端在大型机上的 IBM DB2 上创建一个简单的数据库表,其中包含 Timestamp 类型的列 -

CREATE TABLE scma.timetest(
T_TYPE VARCHAR(8),
T_DATE TIMESTAMP
);

无论是否插入任何记录,如果我执行 select * from scma.timetest; 我最终会得到以下异常 -

java.nio.charset.UnsupportedCharsetException: Cp1027

如果我没有时间戳类型列,则一切正常。我尝试使用 -Dfile.encoding=UTF-8 启动 JDBC 客户端,但没有成功。我也从 Java 程序中尝试过同样的操作,它会导致相同的错误。

这与提到的问题不一样here ,我没有得到 ClassNotFoundException。任何可能出错的指针。如果有帮助的话,这里是完全异常(exception) -

Exception in thread "main" java.nio.charset.UnsupportedCharsetException: Cp1027
at java.nio.charset.Charset.forName(Charset.java:531)
at com.ibm.db2.jcc.am.t.<init>(t.java:13)
at com.ibm.db2.jcc.am.s.a(s.java:12)
at com.ibm.db2.jcc.am.o.a(o.java:444)
at com.ibm.db2.jcc.t4.cc.a(cc.java:2412)
at com.ibm.db2.jcc.t4.cb.a(cb.java:3513)
at com.ibm.db2.jcc.t4.cb.a(cb.java:2006)
at com.ibm.db2.jcc.t4.cb.a(cb.java:1931)
at com.ibm.db2.jcc.t4.cb.m(cb.java:765)
at com.ibm.db2.jcc.t4.cb.i(cb.java:253)
at com.ibm.db2.jcc.t4.cb.c(cb.java:55)
at com.ibm.db2.jcc.t4.q.c(q.java:44)
at com.ibm.db2.jcc.t4.rb.j(rb.java:147)
at com.ibm.db2.jcc.am.mn.kb(mn.java:2107)
at com.ibm.db2.jcc.am.mn.a(mn.java:3099)
at com.ibm.db2.jcc.am.mn.a(mn.java:686)
at com.ibm.db2.jcc.am.mn.executeQuery(mn.java:670)

最佳答案

将其从评论移至此处:

旧版 DB2 for z/OS 通常对字符数据使用 EBCDIC(也称为 CP1027)编码。我还相信 DB2 将时间戳值作为字符串发送到客户端,尽管它们内部存储方式不同。我怀疑您使用的 Java 运行时不支持 CP1027,因此它不知道如何将 EBCDIC 数据转换为客户端所需的任何数据。我无法解释为什么 VARCHAR 值正常。

有关 DB2 编码的更多详细信息,您可以 check the manual .

您可以强制 DB2 使用不同的编码创建表,Java 可能会支持这种编码:

CREATE TABLE scma.timetest(...) CCSID UNICODE

另一种选择可能是使用支持 EBCDIC (CP1027) 编码的不同 Java 运行时。附带一些 DB2 客户端软件包的 IBM JDK 将是一个不错的选择。

您(好吧,不是您,而是大型机系统程序员)也可以配置数据库(子系统)的默认编码方案。

关于java - 不支持的字符集异常 : Cp1027 with DB2 JDBC Driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36354899/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com