반응형

 

 

 

Error

pymysql.err.InternalError: (1366, "Incorrect string value: 'job' for column at row 1")

 

저는 파이썬의 pymysql을 사용해 제 DB에 한글 데이터를 입력하던 과정에서 위와같은 에러를 만나게 됐습니다.

영어로 된 데이터를 넣을 때는 생기지 않던 에러이다보니 단번에 '한글 인코딩의 문제구나!'를 알아챘지요.

 

그래서 바로 우리 모두의 스승인 구글 교수님께 여쭤(?)봤습니다.

검색해본 결과 pymysql.connect()함수의 파라미터 값으로 charset='utf8'을 넣어 주면 된다고 해서 넣어봤습니다만

결과는.. Fail.. ㅠㅠ

 

하지만 이에 굴하지 않고 더 열심히(?) 분석해본 결과 문제는 제 Database 자체의 인코딩 문제였습니다!

파이썬 내의 데이터 송수신에서의 인코딩도 중요하지만 근본적으로 제 DB가 한글을 읽을 수 없는 인코딩 방식으로 설정되어 있다면 무용지물이었던 거지요!

 

 

Solution

 

윈도우의 cmd 창이나 유닉스/리눅스 계열의 터미널을 열어 mysql에 접속을 하신 후 다음과 같이 명령어를 입력해주시면 됩니다!

 

ALTER DATABASE [DB명] CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE [column명] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

간단하게 이유를 말씀드리자면 Mysql의 utf8 문자셋은 UTF-8 인코딩을 부분적으로만 구현하여서, 1~3 바이트로 구성된 UTF-8 인코딩 심볼은 저장할 수 있지만 4바이트를 차지하는 인코딩 된 심볼은 지원하지 않는다고 합니다!

다행히 MySQL 5.5.3(2010년 초에 출시)부터는 이를 지원하는 utf8mb4라는 새로운 인코딩이 도입되어 astral symbols을 포함하여 유니코드를 완벽하게 지원해주고 있습니다!

 

이상으로 pymysql의 문제 해결 및 mysql에 한글도 저장이 가능하게 하는 인코딩 설정 방법을 알아보았습니다:)

 

 

 

반응형
반응형