5Python5(ゴーパイソンゴー)

プログラミングに挫折したわたしが一流のPython使いになるまでの備忘録

UnicodeEncodeError: 'latin-1' のエラーがでたときの対処法

PythonMySQLに接続する際、
pymysqlを利用して接続しようとすると

UnicodeEncodeError: 'latin-1' codec can't encode characters in position ~

のエラーが出力された。

データベースの文字コードを調べるSQLはこちら

mysql> show create database dbname;

調べてみると

+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
| dbname      | CREATE DATABASE `dbname` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+

utf8に設定されている。


以下のSQLでも調べてみる。

mysql> show variables LIKE 'chara%';

出力結果

+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | cp932                                                   |
| character_set_connection | cp932                                                   |
| character_set_database   | utf8                                                    |
| character_set_filesystem | binary                                                  |
| character_set_results    | cp932                                                   |
| character_set_server     | utf8                                                    |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+

文字コードUTF-8になってるようだ。

PyCharmの文字コードは右下に記載されている
f:id:booleanoid:20180126212050p:plain

文字コードはいずれも「UTF-8」なのになぜか
UnicodeEncodeError: 'latin-1' codec can't encode characters in position ~
のエラーコードが出力されているようだ。

MySQLに接続するのにpymysqlを利用しているのだが、どうやらこいつが影響しているようだ。

MySQLに接続する設定のパラメータでcharsetも指定したら
文字コードのエラーが消えました。
charset='utf8' を追記しました。

connect=pymysql.connect(
    user='dbuser',
    password='password',
    host='localhost',
    database='dbname',
    charset='utf8'
)


参照ページ
pcl.solima.net