DataGrip [jcc][t4][1065][12306][4.26.14] 捕获到 java.io.CharConversionException。

从DataGrip访问DB2数据库时发生java.io.CharConversionException

故障排除

问题

DataGrip 使用 IBM Data Server Driver for JDBC and SQLJ的应用程序访问对字符数据使用双字节字符集编码的数据库 (例如CCSID 1399-日语)。在JRE 1.8或更高版本下运行时,应用程序会收到 SQL异常,在查询字符数据时显示消息 “捕获java.io.CharConversionException” 和ERRORCODE =-4220。

症状

抛出的异常与此类似:

[jcc][t4][1065][12306][4.26.14] 捕获到 java.io.CharConversionException。有关详细信息,请参阅相连接的 Throwable。 ERRORCODE=-4220, SQLSTATE=null.

原因

IBM Data Server Driver for JDBC and SQLJ依赖于Java运行时进行字节到字符的转换。该错误是由于在JRE 1.7和更低版本中的Java字符转换器接受的字符数据中存在特定的字节序列,但在使用java的JRE 1.8中被视为无效并被拒绝io.charConversionException。

环境

DataGrip 2024.3.X

诊断问题

您可以使用十六进制函数找出字符列中数据的字节值:

例如,要找出表TAB1中COL1列中的字节值,请运行:
从表1中选择十六进制 (col1)

关于指定的字符集编码/CCSID,这可以帮助识别需要被纠正的无效字节序列。

解决问题

问题的解决方案是识别和纠正无效数据。

在修复无效数据之前,可以使用以下解决方法来保持应用程序的连续性:

  • 设置驱动程序配置属性db2.jcc.charsetDecoderEncoder = 3 设置此属性后,驱动程序将指示Java字符转换器在无效字节序列的解码输出中使用替换 (虚拟) 字符,而不是抛出java.io.charConversionException异常。

DataGrip设置:

  1. Right-click on the data source and go to Properties (Ctrl + Alt + Shift + S).

  2. Go to the Advanced tab and add -Ddb2.jcc.charsetDecoderEncoder=3 in the VM Options as shown below.
    在这里插入图片描述

  3. Apply the settings.

  4. Right-click on the data source again (Ctrl + Alt + Shift + S), navigate to Diagnostics, and select Force Refresh.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼与渔yuyuyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值