pyMySQL set connection character set

mysql, pymysql, python, unicode

Solution

I worked it out by poking around in the pyMySQL source (I had tried, but couldn't find the right place!).

You can specify it when you create the connection:

conn = pymysql.connect(host='localhost',
                       user='username',
                       passwd='password',
                       db='database',
                       charset='utf8')

Solved my problem.

Problem

I'm developing a fairly straightforward web app using Flask and MySQL. I'm struggling with unicode. Users sometimes paste stuff that they copied from Word and it's falling over with the old smart quotes `u'\u201c'`. A little bit of investigation shows that the connection I have to MySQL is using the `Latin1` charset (seems to be the default). How can I specify for it to use unicode for its connection? I'm using pyMySQL, which purports to be a drop-in replacement for MySQLdb. MySQLdb defines a `set_character_set(self, charset)` function for `connection` objects, but pyMySQL doesn't (I get an error if I try).

Original source