charset 이 다른 두 테이블을 조인하기
Posted 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
로 해주면 위의 에러가 발생하지 않고 데이터가 잘 나오게 된다.
'DBMS > MySQL' 카테고리의 다른 글
MySQL5.5 Replication 시작시 추가입력사항 (0) | 2011.10.05 |
---|---|
MySQL Tunning시 사용되는 명령어 몇개... (0) | 2011.10.03 |
log-bin 파일 정리하기 (0) | 2011.05.13 |
[요약]MySQL을 위한 하드웨어 최적화 (0) | 2011.05.02 |
mysqlbinlog 명령어로 바이너리 로그 소스로 변환하기 (0) | 2011.04.27 |
- Filed under : DBMS/MySQL