2011-10-25 4 views
3

다른 사용자가 관리하는 DB2 데이터베이스에서 데이터를 선택하려고하는데,이를 데이터 관리를 위해 저의 SQL 데이터베이스에 삽입 할 수 있습니다. 이 작업을 수행하기 위해 Java 프로그램을 사용하고 있으며 프로그램이 테스트 데이터에서 성공적으로 테스트했습니다. 그러나 db2 데이터의 이상한 기호 때문에 오류가 발생합니다. 다음은 내 오류 로그입니다. 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 

당신이 볼 수 있듯이

는, 이름 열은 오류를 던지는 재미 Â와 데이터 (ISCÂD 번호 5290)를 갖는다. 그러나 db2 테이블의 데이터를 열람하면이 옵션이 나타나지 않습니다.

나는 mysql 테이블을 UTF-8 유니 코드 ci로 설정했다.

db2 데이터베이스는 나로 관리되지 않기 때문에 편집 할 수 없습니다.

내 데이터에서이 기호를 찾으려면 어떻게해야합니까?

+0

DB2 데이터베이스가 실행되는 플랫폼은 무엇입니까? 또한 오류가 발생하는 _source_ 행을 찾아서 실제로 포함 된 것을 파악할 수 있습니까? –

+0

이 코드를 텍스트로 변환 할 때 해당 섹션에 실제로 MICROPHONE LAVALIER WIRELESS (ISC — D # 5290) SHURE MODEL ULXP14/85가 포함되어 있습니다. db2는 AS400 플랫폼을 실행 중입니다. 그래서 그 심볼을 이해하지 못하는 java.String과 java.lang에 문제가 발생했다. – Evilsithgirl

+0

'—'은 'em-dash'('-'와 유사하지만 다른 문자)의 html 인코딩입니다. 이것은 데이터베이스의 문자열이 웹 페이지로 직접 출력되고 있음을 나타냅니다. 나는 그것이 'Â'문자로 잘못 번역되는 방식을 이해할 수 없었습니다 (관련 데이터 포인트를 공유하지 않는 것처럼 보입니다). 자바가 실제로 삽입물보다 먼저 생각하는 부분은 무엇입니까? (당신이 얻는 오류는 데이터베이스에서 생성 될 가능성이 큽니다. 따라서 여러 개의 번역이있을 수 있습니다)? –

답변

0

당신은 인코딩을 위해 UTF-8을 사용하고 '당신은 당신의 JDBC 연결 URL에 다음 매개 변수를 추가 할 수 있다면

<connection_url>?useUnicode=yes&characterEncoding=UTF-8 

UTF-8이 적합하지 않은 경우는, 인코딩으로 대체 할 수 귀하의 필요에 따라

희망이 있습니다. x97 \ XC2 \

1

내 데이터에서이 기호를 찾으려면 어떻게해야합니까?

  1. 테스트 데이터는 무엇입니까? Â 케이스에 대해 테스트 되었습니까?

  2. 비슷한 데이터베이스의 더미 복사본을 만들거나 문제의 위치에서 데이터베이스 샘플을 가져옵니다. 문자를 \^A으로 바꿉니다.

저는 여전히 문제가 귀하의 자바 코드에 있다고 믿습니다. 자바로 파이썬이나 간단한 코드를 사용해도 똑같은 일을 해보십시오.

0

Java 프로그램을 건너 뛰고 DB 제공 도구를 사용하여 데이터를 이동하십시오. DB2의 경우 db2 export을 사용하여 데이터를 플랫 파일로 가져올 수 있습니다. 그런 다음 mysqlimport을 사용하여 MySql에로드하십시오.

2

유니 코드 문자 — (전각 대시) 인코딩을 위해 UTF-8 바이트의 시퀀스이다

이는 자바 코드는 UTF-16 (원시 자바으로 UTF-8 데이터 변환 것처럼 보인다 인코딩). 그런 다음 삽입 Â와 em 대시에 대한 UTF-16 코드 포인트가 실제로 유효하지 않은 UTF-8 코드 포인트이기 때문에 실패합니다.

삽입을 수행하기 전에 적절한 UTF-16 표현을 얻기 위해 UTF-8 코덱을 사용하여 DB2에서 읽은 내용을 디코드하거나 대상 데이터베이스에 UTF-8 인코딩이 필요한 경우 가장 좋은 방법 일 수 있습니다 해결책은 java.String을 전혀 거치지 않고 바이너리 데이터를 읽고 쓰는 것입니다.