요약
- 회원가입 시 한글 데이터로 가입 요청 -> 500 에러 (영어 데이터로 가입 요청 -> 성공)
- Spring 로그 확인 : DB에 요청받은 회원 데이터를 저장(Repository - save())할 때 다음과 같은 에러가 발생함.
- ERROR 1366 (HY000): Incorrect string value: '\xEC\x9D\xB4\xEB\xAF\xB8...' for column 'name' at row 1
- DB에 한글 데이터 저장 시 문제가 발생 -> 인코딩 문제
- 데이터베이스 인코딩 UTF-8로 설정 후 해결 완료
로컬 환경(인텔리제이 + jpa + mysql)에서 진행하다가 배포 후 저런 에러를 만나니.. 거의 3시간가량 삽질.... 좋은 경험이었다..
발생
Pre Project를 진행하며 배포 후 테스트를 진행하던 중(회원가입, 로그인, 게시글 crud등) post메서드로 요청 시 다음과 같이 500 에러를 응답받는 것을 확인했다.
배포 전 마지막으로 로컬에서 프론트분들이랑 테스트를 진행했을 때는 모두 정상적으로 통과했기 때문에 더욱 당황스러웠다...
원인
팀원들이랑 각각 테스트를 진행하며 한글 데이터로 요청을 보냈을 때만 500 에러가 뜨는 것을 확인하였고, 로그를 통해
DB에 한글로 된 데이터가 저장될 때 에러 로그가 뜨는 것을 확인하였다.
즉, 한글 인코딩 쪽이 문제였다.
해결
방법 1. MySQL 명령어로 인코딩 설정
아래 명령어는 MySQL로 접속 후 한글 데이터가 저장되는 테이블들을 전부 인코딩 설정하면 된다.
ALTER TABLE (테이블명) convert to charset utf8;
방법 2. Spring에서 DB 인코딩 설정
url에 characterEncoding=UTF-8&characterSetResults=UTF-8를 다음과 같이 기입하기.
혹시 jpa.hibernate.ddl-auto= create 또는 create-drop 이 아니라면 MySQL에서 설정하는 방법을 추천한다.
(ddl-auto= update 로는 인코딩 변경 내용이 적용이 안 되는 건지 아래 방법으로 진행했을 때도 똑같이 한글 관련 오류가 발생하였다.)
# application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/{schema name}?characterEncoding=UTF-8&characterSetResults=UTF-8
username: ${mysql-username}
password: ${mysql-password}
Reference
MySQL 테이블에 데이터 한글 입력 시 오류 해결
insert로 테이블에 한글로 정보를 입력할 때 다음과 같은 오류가 발생하였다. ERROR 1366 (HY000): Incorrect string value: '\xEC\x9D\xB4\xEB\xAF\xB8...' for column 'name' at row 1 그런데 이건 내 서버도 아니고 root 권한
mitny.tistory.com
'ETC. > Error' 카테고리의 다른 글
[IntelliJ] java: error: release version 17 not supported (0) | 2022.08.21 |
---|---|
[Postman] Cloud Agent Error: Can not send requests to localhost 발생 (0) | 2022.08.21 |