When 'ping' reconnects to a server, it forgets the charset applied to the connection. I think this could be solved by overriding 'ping' in Connection.
Like maybe:
def ping(self):
_mysql.connection.ping(self)
self.set_character_set(self.string_decoder.charset)
There may also be other things that get forgotten the should go there too.
See http://trac.edgewall.org/ticket/3723 for additional context, and I'm happy to answer any questions you might have.
Thanks very much,
Evan Dower