Python 에서 Mysql Insert 사용시 아래와 같이 Incorrect string value 에러가 할 경우 원인은 보통 2가지 입니다.
Incorrect string value: '\xF3\xB0\x8B\xAF\xEA\xB8' for column 'content' at row 1
원인 1. Mysql 혹은 MariaDB 의 Charter set ( 문자셋 ) 문제
보통 DB 의 Charter set 문제일 경우가 많습니다. 이 경우 DB 의 Character set 을 utf8 혹은 utf8mb4 로 변경해 주시거나 업데이트 해주시면 됩니다.
테이블 업데이트 쿼리는 대충 아래와 같습니다.
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ALTER TABLE table_name CHANGE column_name TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
원인 2. Python mysql 의 접속 설정 문제
제가 격은 문제 입니다. DB 의 생성은 Laravel 로 utf8mb4로 생성하고 Python 으로 콘텐츠를 넣는데 위와 같은 에러가 발생 하였고 원인은 mysql connect 옵션에서 utf8mb4 를 지정해줘야 하는 문제 였습니다.
def connectMydb(): print 'connectMydb' mydb = mysql.connector.connect( host=str(os.environ.get("DB_HOST")), user=str(os.environ.get("DB_USER")), passwd=str(os.environ.get("DB_PASS")), database=str(os.environ.get("DB_DATABASE")) ) return mydb
위와 같은 코드에 아래와 같이 charset='utf8mb4' 를 추가 하였습니다.
def connectMydb(): print 'connectMydb' mydb = mysql.connector.connect( host=str(os.environ.get("DB_HOST")), user=str(os.environ.get("DB_USER")), passwd=str(os.environ.get("DB_PASS")), database=str(os.environ.get("DB_DATABASE")), charset='utf8mb4', ) return mydb
기본적으로 python mysql 에서 접속 옵션으로 utf8 을 사용하는지 한글은 잘 동작하는데 특수 문자가 들어가려 하니 위와 같은 에러가 발생 했었습니다. 이제 한번 Python 을 통해서 해당 Insert 가 잘 동작하는지 한번 테스트 해보시기 바랍니다 :D
즐거운 개발 되시기 바랍니다.
'Programming > Python' 카테고리의 다른 글
Python 프로그램을 nohup & 으로 백그라운드 동작시 UnicodeEncodeError: 'ascii' codec can't encode character 과 같은 에러가 날 경우 (0) | 2019.02.18 |
---|---|
[Python] MAC 에서 Homebrew 를 이용하여 Python3 설치하기 (0) | 2018.10.13 |