无效的CESU-8序列

2020-08-25 07:03发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

当前,当向SAP HANA发出查询以从JAVA应用程序获取一些记录时,我们会遇到一些问题。 我们在应用程序中使用的技术是:

  • JDK 1.8.x。
  • Spring Core 4.3.19.RELEASE。
  • Spring Boot 1.5.16.RELEASE。
  • 数据库SAP HANA 2.00.034.00.1539746999 PRODUCCION
  • 数据库SAP HANA 2.00.042.00.1564994110 开发
  • 驱动程序JDBC ngdbc 2.3.62。
  • HDB客户端2.3.144

数据库中大约有20、000、000条记录,因此应用程序按页面获取信息。 页面的大小为1,000,000条记录,而ResultSet的fechSize被配置为pageSize/4,即250,000条记录要保留在内存中。 对于每个读取的页面,信息都存储在文件FILE_NAME.TXT中。 在前八页(8、000、000条记录)中,似乎没有问题,但是在某些时候,驱动程序JDBC开始引发异常:

com.sap.db.jdbc.exceptions.Cesu8ConversionException:无效的CESU-8序列:[49、54、49、54、50、48、49、57、49、49、49、50、48 ,57、49、54、49、54、2、48、51、2、48、48,-1,-105,-102,-52、50、2、0、0、0、0、0、0 ,0、0、0、64、48、12、57、55、51、53、51、54、51、49、55、56、54、51、20、48、57]

重要的是要阐明,结构的数据库(表)没有任何CLOB或BLOB类型的字段。 所有字段的类型均为VARCHAR,DECIMAL,INTEGER。

04705881D294DAE216006600109AB107; 09875634; 985309; 2019-11-16; 20; XX; XXX;?; 00; X; 4673625091268437; 12345678922222222222222; 09; 00;?; 59076123689; 098767890987; 09876543212345678909;?;?; X; 0 ; 0; 80458127

希望您能帮助我。

提醒。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

当前,当向SAP HANA发出查询以从JAVA应用程序获取一些记录时,我们会遇到一些问题。 我们在应用程序中使用的技术是:

  • JDK 1.8.x。
  • Spring Core 4.3.19.RELEASE。
  • Spring Boot 1.5.16.RELEASE。
  • 数据库SAP HANA 2.00.034.00.1539746999 PRODUCCION
  • 数据库SAP HANA 2.00.042.00.1564994110 开发
  • 驱动程序JDBC ngdbc 2.3.62。
  • HDB客户端2.3.144

数据库中大约有20、000、000条记录,因此应用程序按页面获取信息。 页面的大小为1,000,000条记录,而ResultSet的fechSize被配置为pageSize/4,即250,000条记录要保留在内存中。 对于每个读取的页面,信息都存储在文件FILE_NAME.TXT中。 在前八页(8、000、000条记录)中,似乎没有问题,但是在某些时候,驱动程序JDBC开始引发异常:

com.sap.db.jdbc.exceptions.Cesu8ConversionException:无效的CESU-8序列:[49、54、49、54、50、48、49、57、49、49、49、50、48 ,57、49、54、49、54、2、48、51、2、48、48,-1,-105,-102,-52、50、2、0、0、0、0、0、0 ,0、0、0、64、48、12、57、55、51、53、51、54、51、49、55、56、54、51、20、48、57]

重要的是要阐明,结构的数据库(表)没有任何CLOB或BLOB类型的字段。 所有字段的类型均为VARCHAR,DECIMAL,INTEGER。

04705881D294DAE216006600109AB107; 09875634; 985309; 2019-11-16; 20; XX; XXX;?; 00; X; 4673625091268437; 12345678922222222222222; 09; 00;?; 59076123689; 098767890987; 09876543212345678909;?;?; X; 0 ; 0; 80458127

希望您能帮助我。

提醒。

付费偷看设置
发送
5条回答
派大星 ヾ
1楼-- · 2020-08-25 07:31

早上好,拉斯。

我无法更改数据库中列的定义,因为所有者未授权更改。 同时,您知道任何列中可能具有的功能" STRTOBIN"的作用吗? 换句话说,如果我在查询中应用函数" STRTOBIN",它将解决问题吗? 例如:


从表_1中选择COLUMN_1,STRBIN('COLUMN_2','UTF-8'),COLUMN_3;

我不知道,因此,我不了解驱动程序在读取数据时如何工作。 你觉得呢?

请注意。

空代码
2楼-- · 2020-08-25 07:24

不确定STRBIN函数在这里的适用范围。

如果我不能更改表,我将要做的只是转换数据类型

选择
TO_NVARCHAR(COLUMN_2)作为COLUMN_2
FROM
TABLE_1;

这样,您可以轻松地检查转换是否解决了问题,并且 每次进行转换的开销相对较小。 此处重要的是JDBC驱动程序将其视为结果集中的NVARCHAR列,并将其正确映射到java.String。

愤怒的猪头君
3楼-- · 2020-08-25 07:30

其中似乎存在多字节字符数据 VARCHAR列之一。 JDBC驱动程序尝试将数据转换为JAVA String,即UNICODE UTF-8,但是它期望数据为单字节(由于VARCHAR列数据类型)。

要解决此问题, 将这些列更改为NVARCHAR。

请注意,HANA不会停止多字节数据进入VARCHAR列;

何必丶何苦呢
4楼-- · 2020-08-25 07:25

感谢拉尔斯,我将列更改为NVARCHAR并向您报告结果。

祝您有美好的一天。

落灬小鱼
5楼-- · 2020-08-25 07:21

谢谢,感谢您的协助。 重要的是我们的问题似乎并不一致。 换句话说,我们可以在不同的记录范围内回答这个问题。

-在250万条记录中。

-在500万条记录中。

-在1000万条记录中。

-而且,在39万条记录中。

因此,您认为问题的原因是相同的吗?


有关。

一周热门 更多>