본문 바로가기

Data&Processing

[talend] character 컬럼 적재시 row단위 오류(euckr -> utf8)

talend를 이용 데이터 적재시 다음과 같은 에러발생하였음

환경 : mysql 5.5



Starting job traffic_migration at 10:00 13/09/2012.


[statistics] connecting to socket on port 3975

[statistics] connected

Incorrect string value: '\xEF\xBF\xBD\xEB\x9D\xBC...' for column 'url' at row 344

Incorrect string value: '\xEF\xBF\xBD\xE5\xA4\xB7...' for column 'url' at row 796

Incorrect string value: '\xEF\xBF\xBD\xE5\xA4\xB7...' for column 'url' at row 721

Incorrect string value: '\xEF\xBF\xBD' for column 'url' at row 577

Job traffic_migration ended at 10:01 13/09/2012. [exit code=0]


에러가 되는 url 컬럼을 찾아보았더니 내용이
"*******?srch=쁄라라" 라는 내용이었고 이전 경험상 문자열setting과 관련된 문제라 생각해서 해당 테이블 character set을 살펴보니,

source DB : UTF8, source table : euckr
target DB : UTF8, target table : euckr

source DB와 source table, target DB 의 character set을 바꾸기는 힘드므로 여러가지로 테스트를 해보았고 잠정결론은 다음과 같은데 내부로직은 자세히 알 수 없으니 추정할 따름임.

euckr -> euckr : x (target db가 utf8이므로 euc > utf8 > euc 중 euc > utf8에서 매핑이 안되지만 에러는 안나고, 그 매핑안된상태에서 euc 변환시 에러)
euc > utf8 : △ (변환은 되지만 알수없는 문자로)
utf8 > utf8 : o ( 문자깨짐없고 누락없음)

1) 현재setting
source DB : UTF8, source table : euckr
target DB : UTF8, target table : euckr
-> 오류
target db가 utf8이므로 euckr ----ETL---> utf8 > euckr 
변환 작업 중 euckr > utf8에서 매핑이 안되지만 에러는 안나고, 그 매핑안된상태에서 euckr 변환시 에러

2)target table 수정
source DB : UTF8, source table : euckr
target DB : UTF8, target table : UTF8
->△ euckr ----ETL---> utf8(DB) > utf8(table)
euckr > utf8로 매핑은 안되어 알수없는 문자로 들어감(쁄라라 가 ※라라 와 같이 insert됨)

3)target table 수정, source table select시에 talend에서 utf8로 변환 후 select
source DB : UTF8, source table : euckr->UTF8
target DB : UTF8, target table : UTF8
Input에서 query부분을 다음과 같이 수정함
convert(url using8) url



-> euckr > utf8(ETL에서변환) ---- ETL---> utf8(DB) > utf8(table)
문자깨짐없고 누락없음