PythonでMySQLに接続する際、
pymysqlを利用して接続しようとすると
UnicodeEncodeError: 'latin-1' codec can't encode characters in position ~
のエラーが出力された。
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\ | +--------------------------+---------------------------------------------------------+
PyCharmの文字コードは右下に記載されている
文字コードはいずれも「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