개요
11월 23~24일 무박 2일 동안 해커톤을 진행했다. 모든 문제를 해결하고 잠깐 멍한 상태로 쉬고 있었는데 갑자기 같은 팀원에게 배포 환경에서 MySQL을 확인해달라는 부탁을 받았다.
바로 정신차리고 알아보았는데, 한국어 데이터가 들어간 테이블을 조회해보니 전부 깨져서 '?'로 표시돼있었다. 이 때문에 API를 호출했을 때 한국어로 된 응답데이터가 전부 깨져있었던 것이다.
원인과 해결
원인은 간단했다. MySQL의 텍스트 처리 설정이 올바르게 되지 않아서였다. 심플하게 말하자면 한글 처리를 못하니 처리하도록 설정을 변경해주면 된다.
docker를 사용해서 배포했기에 docker-compose를 기준으로 설명하겠다.
docker-compose.yml
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --skip-character-set-client-handshake
mysql 컨테이너 설정을 위와 같이 변경한다.
- --character-set-server=utf8mb4 : MySQL 서버의 기본 문자 세트를 utf8mb4로 설정한다. utf8mb4는 MySQL에서 확장된 UTF-8 문자 세트로, 이모티콘을 포함한 모든 유니코드 문자를 지원한다.
- --collation-server=utf8mb4_unicode_ci : MySQL 서버의 기본 문자 정렬 규칙을 utf8mb4_unicode_ci로 설정한다. utf8mb4_unicode_ci는 유니코드 문자 집합에 대한 대소문자 구분 없는 정렬 규칙을 사용한다.
- --skip-character-set-client-handshake : 클라이언트가 사용하는 문자 세트 설정을 무시하고, 서버의 기본 문자 세트 설정을 강제로 사용하도록 한다.
이 설정들은 MySQL 서버가 UTF-8 문자 세트를 기본으로 사용하도록 강제하여, 한글과 이모티콘 같은 유니코드 문자들을 올바르게 처리할 수 있게 한다.
728x90
반응형
'Projects > Resolve Problems' 카테고리의 다른 글
UnSupportedException (0) | 2024.09.06 |
---|---|
Uncaught Error: [🍍]: "getActivePinia()" was called but there was no active Pinia. (0) | 2024.07.05 |
CommunicationsException: Communications link failure (0) | 2024.06.16 |
FileNotFoundException (0) | 2024.05.17 |
NonUniqueResultException (1) | 2024.03.26 |