Java DB2选择字符问题

Java DB2选择字符问题,java,mysql,db2,Java,Mysql,Db2,我试图从另一个人管理的DB2数据库中选择数据,以便将其插入到我管理的SQL数据库中进行数据操作。我正在使用一个java程序来完成这项工作,该程序已经在测试数据上成功地进行了测试。但是,由于db2数据中有奇怪的符号,所以我得到了错误。这是我的错误日志 Incorrect string value: '\xC2\x97D #5...' for column 'Name' at row 1 java.sql.SQLException: Incorrect string value: '\xC2\x97

我试图从另一个人管理的DB2数据库中选择数据,以便将其插入到我管理的SQL数据库中进行数据操作。我正在使用一个java程序来完成这项工作,该程序已经在测试数据上成功地进行了测试。但是,由于db2数据中有奇怪的符号,所以我得到了错误。这是我的错误日志

Incorrect string value: '\xC2\x97D #5...' for column 'Name' at row 1
java.sql.SQLException: Incorrect string value: '\xC2\x97D #5...' for column 'Name' at row 1
INSERT INTO `Temp_Equipment_Inventory`.`PC_Table10i` SET `Account_No`='1019TJ148001',`Inventory_No`='569931',`Building_No`='0060',`Location`='CLASSRM',`FYYR_No`='2004',`Cost`='635.00',`Name`='MICROPHONE LAVALIER WIRELESS  (ISCÂD #5290)                 SHURE MODEL ULXP14/85                                       ',`CDCATY`='   ',`CDSRCE`='M',`FLDCAL`=' ',`CDACQN`='G',`FLOWNR`='Y',`FLSHAR`=' ',`CDDELT`='00',`CNYTDT`='00',`NOPURO`='6870607-01 ',`NOPIMO`='01',`CDPREI`='E',`Original_Amount`='155.00',`Serial_Code`='0309040351          ',`CDCOMP`=' ',`NOCHECK`='680146 ',`CDCOMM`='3651400',`Last_Update`='2008-07-18',`CDDEPT`='148',`Room_No`='0300 ',`Date_Scanned`=NULL,`Date_Acquired`='2004-03-09',`Manufacturer_Name`='SHURE       ',`Expiry_Date`=NULL
正如您所看到的,Name列包含数据iscd5290,其中有一个抛出错误的搞笑符号。但是,当我浏览db2表中的数据时,不会出现这种情况

我已经将mysql表设置为UTF-8 unicode ci

我无法编辑db2数据库,因为它不是由我管理的

我还可以做些什么来绕过数据中的这个符号

我还可以做些什么来绕过数据中的这个符号

你的测试数据是什么?是否针对这些案例进行了测试

制作一个类似数据库的虚拟副本,或在问题所在位置采集数据库样本。将字符替换为“^A”


我仍然相信,问题在于java代码中没有正确解析东西。尝试使用python或更简单的Java代码来做同样的事情。

跳过Java程序,使用DB提供的工具来移动数据。对于DB2,使用DB2导出将数据导出到平面文件中。然后使用mysqlimport将其加载到MySql中。

如果使用UTF-8进行编码,可以尝试在jdbc连接url中添加以下参数

<connection_url>?useUnicode=yes&characterEncoding=UTF-8
如果UTF-8不适合您的需要,您可以将其替换为您的编码


希望有帮助。

\xC2\x97是用于编码unicode字符的UTF-8字节序列-em破折号

java代码似乎已经将UTF-8数据转换为UTF-16本机java编码,而没有对其进行解码。然后插入失败,因为字符和em破折号的UTF-16代码点实际上是无效的UTF-8代码点


因此,也许解决方案是在执行插入之前使用UTF-8编解码器对DB2中读取的内容进行解码,以获得正确的UTF-16表示,或者如果目标数据库需要UTF-8编码,那么也许最好的解决方案是根本不使用java.String,而只是读取和写入二进制数据

运行DB2数据库的平台是什么?另外,您能否找出错误的来源行,以确定其实际包含的内容?代码中实际包含麦克风领夹式无线ISC&8212;D 5290舒尔ULXP14/85型号,用于将二进制文件转换为文本时的该部分。db2正在以400平台运行。因此,问题在于&8212和java.String不理解该符号;“em-dash”的html编码类似于“-”,但不同。这表明数据库中的字符串是直接输出到网页的。我还没有弄清楚这是如何被错误地翻译成“他们似乎没有共享任何相关数据点”的字符的。Java实际上认为插入之前的行是什么?您得到的错误可能是从数据库生成的,因此,我们可能有多个翻译?当您浏览DB2数据时,如果不是A,会出现什么?您说有DB2SELECT字符问题,但日志中的错误来自insert语句。也许问题出在java或mysql中?编码问题不总是很有趣吗。。。您正在Windows计算机上进行测试吗?正如X-Zero所说,实体代码是用于em破折号的。但您在例外情况中看到的是中C2和em dash 97的相应代码。我想说的是:也许你看到的只是堆栈跟踪以不兼容的编码打印到控制台。这不是问题的根源,但可能会使问题变得模糊。