1. 문제점

Oracle에서 PK컬럼인 NO에 'ABC'와 'ABC '를 다른데이터로 인식하여 두개의 컬럼이 존재하였다.

 

[PK: NO]1행 : 'ABC'

[PK: NO]2행 : 'ABC '

 

2. MySQL로 전환시 오류 발생

MySQL에서 collation=euckr에서 Unique 체크시에 Pad Space 방식으로 데이터를 비교한다.

즉, 'ABC'와 'ABC '를 같은 데이터로 인식하여 중복데이터이므로 데이터삽입 오류가 발생한다. (둘 중에 먼저 삽입되는 하나만 들어간다.)

 

'ABC' => [A][B][C][ ] (공백을 채워서 Unique 비교를 수행)

'ABC ' => [A][B][C][ ]

 

 

3. 유일성 체크시 trim을 적용하여 중복된 데이터를 검색한다.

SELECT TRIM(NO), COUNT(*)
  FROM TABLE_NAME
 GROUP BY TRIM(NO)
HAVING COUNT(*) > 1;

 

 

4. 중복 데이터 제거하고 전환한다.

SELECT *
  FROM (SELECT NO, ROW_NUMBER() OVER(PARTITION BY TRIM(NO) ORDER BY UPD_DATE) RN
          FROM TABLE_NAME)
 WHERE RN <= 1;

+ Recent posts