에러 메세지

1
DataError: (1366, "Incorrect string value: '\\xEC\\x9E\\x84\\xEA\\xBA\\xBD...' for column `antifragile`.`user`.`user_name` at row 1")

문제 상황

로컬 파이썬에서 AWS RDS에 데이터를 입력하려는 상황.
한글을 포함한 데이터를 입력하려는데, 1366 오류가 발생했다.

오류 분석

오류코드를 보니 “옳지 않은 문자열 값”이라는 말이 보인다.
문자열 중 ‘\xEC\x9E\x84\xEA\xBA\xBD…’ 라는 값이 문제라는 건데, 이는 특수문자 혹은 영어가 아닌 다른 언어를 뜻하는 것으로 판단된다.

원인

데이터베이스에서 한글을 받아들일 수 없음

해결

테이블의 CHAR SET 변경

CHAR SET이란 ‘문자의 그룹’을 의미한다.
쉬운 이해를 위해서.. 파이썬의 ‘인코딩 방법 선택’ 과 같다고 보면 되겠다.

데이터베이스 혹은 테이블, 칼럼은 생성될 때 그 안에 가질 수 있는 문자의 범위(=CHAR SET)가 지정된다.

RDS에서 데이터베이스나 테이블을 생성할 때 기본적으로 적용되는 CHAR SET은 latin-1로, 한글이 포함되지 않기 때문에 이번과 같은 오류가 발생할 수밖에 없는 것으로 보인다.

이에 대한 해결을 위해 TABLE의 CHAR SET을 변경하는 작업을 아래와 같이 진행했다.

1
2
3
4
5
6
7
8
9
ALTER TABLE 테이블명 CONVERT TO CHARACTER SET 캐릭터셋명;
-- 테이블의 CHARSET을 캐릭터셋명 CHARSET으로 변경

ALTER TABLE user CONVERT TO CHARACTER SET utf8;
ALTER TABLE cam CONVERT TO CHARACTER SET utf8;
ALTER TABLE object CONVERT TO CHARACTER SET utf8;
ALTER TABLE log CONVERT TO CHARACTER SET utf8;
ALTER TABLE images CONVERT TO CHARACTER SET utf8;
-- 예시들. 이로써 한글 사용이 가능해졌다.

여기까지 한 뒤 문제가 해결됐다면 아래는 보지 않아도 된다.

하지만 테이블에 외래키가 포함된 경우, TABLE에 대한 ALTER가 불가능할 수 있다. 이 경우엔 외래키 제약사항(외래키)를 모두 삭제해준 뒤, CHAR SET을 변경하고 이후 다시 외래키를 설정해줘야 한다.

1
2
3
4
5
6
7
8
ALTER TABLE 테이블명 DROP FOREIGN KEY 제약조건명;
-- 외래키 삭제

ALTER TABLE 테이블명 ADD FOREIGN KEY (칼럼명) REFERENCES 참조테이블명(참조칼럼명) 제약사항;
-- 외래키 추가

SELECT * FROM information_schema.table_constraints;
-- 현 데이터베이스에 있는 모든 제약조건명 검색

한글 깨짐 현상 발생시

RDS의 인코딩 세팅을 변경하여 한글이 입력될 수 있도록 해결한다.
이는 RDS의 파라미터 그룹에서 세팅이 가능하다.

AWS 접속 후 RDS 메뉴에서 “파라미터 그룹”을 선택한다.
이후 “파라미터 그룹 생성” 버튼을 클릭한다.
(기존 파라미터 그룹을 사용하려면 생성 부분은 건너뛰기)

파라미터그룹에 대한 내용을 작성해준 뒤 생성한다.

생성한 파라미터 그룹을 클릭해준다.

파라미터 그룹에서 아래 항목들의 인코딩 설정값을 바꿔준다.

항목 설정값
character_set_client utf8mv4
character_set_connection  
character_set_database  
character_set_filesystem  
character_set_results  
character_set_server  
utf8mb4_general_ci utf8mv4_general_ci
collation_connection  
collation_server  

항목은 검색을 통해 빠르게 찾을 수 있다.

설정값은 항목명 옆에서 선택할 수 있다.

파라미터 그룹 생성이 완료되었다면 DB에 적용해주자.
RDS 메뉴에서 DB를 선택한 뒤, 수정버튼을 눌러준다.

하단 추가 구성 섹션에서 DB 파라미터 그룹을 바꿔준다.
이후 하단의 계속 버튼 클릭.

빠른 적용을 위해선 “즉시적용”을 선택한다.

Reference

한글 깨짐 현상 : https://soobarkbar.tistory.com/222
RDS 테이블 CHARSET 변경 : https://velog.io/@iamcoder/Amazon-RDS-%ED%95%9C%EA%B8%80-%EC%84%A4%EC%A0%95