java.sql.SQLException: Illegal mix of collations (euckr_korean_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
두 인코딩 방식이 충돌하는 에러가 나타나서 my.ini의 설정을 변경해야 한다.
0. 현재 상황
0-1. MySQL 인코딩 현황
현재는 모든 DB와 테이블, 컬럼의 인코딩 방식은 'euckr_korean_ci'인데,
mysql의 character_set_server는 latin1이며, collation_server는 latin1_swedish_ci이다.
따라서 euckr_korean_ci로 mysql 인코딩 설정을 변경해야 한다.
현재 설정되어 있는 mysql의 인코딩 방식을 보려면
윈도우 기준, CMD에 들어가 mysql에 접속한 후,
mysql -u root -p
아래 명령어를 입력하면 된다.
mysql> SHOW VARIABLES LIKE 'character_set_server';
+----------------------+--------+
| Variable_name | Value |
+----------------------+--------+
| character_set_server | latin1 |
+----------------------+--------+
1 row in set, 1 warning (0.00 sec)
더 볼 필요도 없다. latin1 부터가 글렀다.
0-2. MySQL의 설정 파일 'my.ini' 파일 경로 현황
내 노트북에 저장되어 있는 my.ini 파일의 경로는 아래와 같다.
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
0-3. my.ini 인코딩 설정 현황
현재 my.ini 파일에 인코딩 설정은 따로 되어 있지 않다.
1. my.ini 인코딩 설정 변경 - MySQL 서버 재시작 (실패)
1-1. my.ini 인코딩 설정 변경
아래와 같이 my.ini 파일을 변경하고 저장하였다.
[client]
default-character-set=euckr
[mysql]
default-character-set=euckr
[mysqld]
character-set-client-handshake = FALSE
init_connect="SET collation_connection = euckr_korean_ci"
init_connect="SET NAMES euckr"
character-set-server = euckr
collation-server = euckr_korean_ci
[mysqldump]
default-character-set = euckr
1-2. MySQL 서버 재시작
서비스 창
윈도우 기준, window + R을 입력한 후 나오는 창에 services.msc를 입력하면 서비스 창이 나오는데,
MySQL 서비스를 찾아 다시 시작 버튼을 누른다.
window + R
services.msc
cmd
또는 cmd를 관리자 모드로 실행하여 다음과 같은 명령어를 입력한다.
<서비스 중지>
net stop mysql
<서비스 시작>
net start mysql
1-3. MySQL 인코딩 변경 확인
윈도우 기준 cmd 창에 들어가 mysql에 접속하고
mysql -u root -p
아래 명령어를 입력하여 인코딩 변경 확인
mysql> SHOW VARIABLES LIKE 'character_set_server';
+----------------------+--------+
| Variable_name | Value |
+----------------------+--------+
| character_set_server | latin1 |
+----------------------+--------+
1 row in set, 1 warning (0.00 sec)
my.ini 설정 변경이 적용되지 않았다.
1-4. 실패 원인
my.ini 파일에 설정을 변경했지만 적용되지 않은 이유는 다음과 같다.
- MySQL 서버가 설정 파일을 제대로 읽지 못했다.
- 다른 설정 파일이 우선적으로 적용되었을 가능성이 있다.
따라서 설정 파일의 경로를 확인 할 필요가 있다.
참고로 내 my.ini 경로는 아래와 같다.
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
2. My.ini 설정 파일 경로 확인
2-1. MySQL 서버 로그 파일 확인
MySQL 서버 로그 파일을 확인하여 설정 파일이 제대로 적용되었는지 확인했다.
C:\ProgramData\MySQL\MySQL Server 5.7\Data\(서버로그 파일 이름).err
나의 경우, 위의 경로에서 err 파일을 찾을 수 있었다.
로그 파일 중 error 부분을 살펴보면 다음과 같다.
mysqld: Table 'mysql.plugin' doesn't exist
2024-07-23T08:05:48.611032Z 0 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2024-07-23T08:05:48.612231Z 0 [ERROR] unknown variable 'mysqlx_port=0.0'
2024-07-23T08:05:48.612889Z 0 [ERROR] Aborting
2024-07-23T08:13:38.058285Z 0 [ERROR] InnoDB: redo log file '.\ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2024-07-23T08:13:38.059524Z 0 [ERROR] InnoDB: InnoDB Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.
2024-07-23T08:13:38.272798Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2024-07-23T08:13:38.274385Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2024-07-23T08:13:38.275572Z 0 [ERROR] Failed to initialize builtin plugins.
2024-07-23T08:13:38.276421Z 0 [ERROR] Aborting
- InnoDB 시스템 테이블스페이스를 생성하는 도중 문제가 생겼다.
- 특히 .ib_logfile0 파일이 이미 존재하여 충돌이 발생하고 있다.
- my.ini 파일에서 mysqlx_port 변수가 잘못 설정되어 있다.
- mysql.plugin 테이블이 존재하지 않는다.
3. MySQL 삭제 후 동일한 버전 재설치
결국 설정을 너무 많이 건드려서 엉망이 되어버렸다.
그래서 깔끔하게 MySQL을 아예 삭제하고 동일한 버전을 재설치하여 처음부터 다시 설정했다.
MySQL을 삭제 후 재설치하는 방법은 다음 링크를 참고하길 바란다.
https://soheepark.tistory.com/198
4. MySQL 스키마, 테이블, 컬럼 character, collation 변경
https://soheepark.tistory.com/199
▶ ONLY_FULL_GROUP_BY 에러 (Error Code : 1055)
https://soheepark.tistory.com/200
위 링크들의 단계를 천천히 꼼꼼하게 실행한 후에 정상적으로 에러 없이 실행되었다.
'[Project] > 업무일지' 카테고리의 다른 글
[Java/JavaSwing] 라벨 출력 시 메모 영역 내 공백 출력 방식 수정 (0) | 2024.07.30 |
---|---|
[Java/JavaSwing] POS 시스템 내 MakeLine 범핑 옵션기능 추가 (0) | 2024.07.29 |
[MySQL] Error Code: 1055. this is incompatible with sql_mode=only_full_group_by (0) | 2024.07.26 |
[Java] 배민원, 쿠팡이츠 계산 예외처리 (0) | 2024.07.22 |
[Java] 화면에 custcnt 데이터 반환 되지 않는 이슈 해결 (0) | 2024.07.18 |