有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JDBC URL DB2编码字符

在JDBCforDB2中有没有办法将URL编码设置为UTF-8

jdbc:db2://../characterEncoding=UTF-8;

我知道MySQL可以工作,但DB2不行

我的问题是,我试图发送一个字符(ASCII表中的E28093),但在DB2中,该字符被转换为箭头字符,这是不正确的

有没有办法发送正确的字符,或者问题出在DB2配置上

DB2是9.4版本,在z/OS中运行


解决

我重新创建了我的表并添加了

CCSID Unicode

进入我的桌子空间。 我用正确的子类型创建了列。 文档链接: https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/char/src/tpc/db2z_createunicodetable.html


共 (1) 个答案

  1. # 1 楼答案

    通常,执行代码页转换的是客户端jdbc驱动程序,在确定问题时,了解客户端jdbc驱动程序的类型和版本非常重要。对于type-4currentjdbc驱动程序版本,您不需要在连接字符串上指定此类详细信息

    代码页转换详细信息取决于客户端jdbc驱动程序版本和类型、客户端应用程序代码页(区域设置)和目标表/列CCSID

    无法对特定转换进行评论,因为您没有提供任何详细信息,即,除了jdbc驱动程序版本和类型外,还需要显示源位置字符的十六进制代码、目标位置的CCSID以及目标位置的十六进制代码

    对于某些版本的type-2驱动程序,可以指定属性sendcharInputF8=yes/no,以影响转换发生的位置(客户端默认值或服务器端)。有关详细信息,请参阅Db2文档

    如果您使用的是旧的jdbc驱动程序(如4.14.xxx),请注意可能存在与字符转换相关的错误,因此您应确保使用Passport Advantage或Fix Central(如4.23.xx或更高版本)的最新jdbc驱动程序

    源字符不是7bit ASCII,而是Unicode,在UTF-8编码中,其三字节十六进制为0xE2 0x80 0x93。在目标数据库中,在SYSIBM中进行验证。SYSCOLUMNS列长度、coltype、ccsid中的值。如果列存储UTF-8值,则在sysibm中显示ccsid列。syscolumns可以是1208
    您可以选择HEX(colname)来查看存储在目标列中的十六进制值