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에 한글도 저장이 가능하게 하는 인코딩 설정 방법을 알아보았습니다:)
'etc' 카테고리의 다른 글
Windows 파일 이름 한 번에 일괄적으로 소문자로 바꾸기 (2) | 2019.11.20 |
---|---|
Web status - HTTP 상태 코드 (0) | 2018.10.12 |
[mysql] DB에서 원하는 기간 별로 데이터 분류하기 (0) | 2018.08.07 |
REST API란? #Web API #HTTP API #Restful API (0) | 2018.07.30 |
메이븐 프로젝트(Maven Project) 생성하기 (0) | 2018.07.02 |