DBMS/MySQL
charset 이 다른 두 테이블을 조인하기
대단한넘
2011. 7. 27. 17:41
같은 Database 안에서 테이블의 charset 이 utf8이지만 세부 charset이 다른경우 (utf8_general_ci, utf8_unicode_ci)
두개의 char나 varchar를 조인하려고 하면 다음과 같은 에러가 발생한다.
ERROR : java.sql.SQLException: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=
이럴경우 궁극적으로는 table의 charset을 변경하여 맞춰주는 것이 맞지만 그렇지 못할경우 collate라는 명령어로 강제로 변환하여 select 를 할수가 있다.
예를 들어 USER 테이블은 utf8_general_ci로 되어 있고 BBS 테이블은 utf8_unicode_ci 로 되어 있을 경우
SELECT U.MEMBER_ID, B.SUBJECT, B.IDX
FROM USER U, BBS B
WHERE U.MEMBER_ID = B.MEMBER_ID
ORDER BY B.IDX
의 경우 조건절에 '=' 중심으로 맞춰줄 charset 을 변경한다.
SELECT U.MEMBER_ID, B.SUBJECT, B.IDX
FROM USER U, BBS B
WHERE U.MEMBER_ID COLLATE utf8_unicode_ci = B.MEMBER_ID
ORDER BY B.IDX
or
SELECT U.MEMBER_ID, B.SUBJECT, B.IDX
FROM USER U, BBS B
WHERE U.MEMBER_ID = B.MEMBER_ID COLLATE utf8_general_ci
ORDER BY B.IDX
로 해주면 위의 에러가 발생하지 않고 데이터가 잘 나오게 된다.