[Python] utf-8 문자열을 MariaDB(Mysql)에 insert하기

Posted on 2017-03-02 18:54:06


Python에서 MySQLdb 라이브러리를 사용하여 MariaDB(Mysql)에 문자열을 insert할 때, 일본어가 깨지는 문제가 발생하였다. DB의 캐릭터셋은 utf-8으로 설정되어 있었다.

MariaDB [(none)]> show variables like 'c%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/Cellar/mariadb/10.1.20/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
| completion_type | NO_CHAIN |
| concurrent_insert | AUTO |
| connect_timeout | 10 |
+--------------------------+---------------------------------------------------------+
14 rows in set (0.00 sec)

MariaDB [(none)]>


문자열이 저장된 텍스트 파일의 인코딩도 utf-8이었다.

$ file data.csv 
data.csv: UTF-8 Unicode text


아무래도 MySQLdb의 문제인 것 같아서 검색을 해보다가 해결방법을 발견했다. 아래와 같이 MySQLdb connect시에 charset 설정을 추가해주면 된다. 요즘 시대에 그냥 utf-8을 default option으로 해도 될 것 같은데...

MySQLdb.connect(host, user, password, db);                                   -> 수정전
MySQLdb.connect(host, user, password, db, use_unicode=True, charset="utf8"); -> 수정후

 



Related Posts

Text string을 hex string으로 변환하는 방법 2017-04-17 21:00:12