replacing connection.character_set_name instance method seems to work but is this the correct/preferred way?
>>> import MySQLdb >>> MySQLdb.get_client_info() '4.1.8' >>> import sys >>> sys.version '2.3.4 (#53, May 25 2004, 21:17:02) [MSC v.1200 32 bit (Intel)]' >>> sys.platform 'win32' >>> cred = {'passwd': 'secret', 'host': 'myhost', 'db': 'mydb', 'user': >>> 'justin'} >>> insert = 'insert into unicodetest2 (foo) values (%s)' >>> alpha = u'\N{GREEK SMALL LETTER ALPHA}' >>> alpha u'\u03b1' >>> conn.close() >>> conn = MySQLdb.connect(**cred) >>> cur = conn.cursor() >>> cur.execute(insert, 'a') 1L >>> conn.commit() >>> conn.close() >>> conn = MySQLdb.connect(**cred) >>> cur = conn.cursor() >>> cur.execute(select) 1L >>> cur.fetchall() ((9L, 'a'),) >>> conn.close() >>> conn = MySQLdb.connect(**cred) >>> cur = conn.cursor() >>> cur.execute(insert, alpha) Traceback (most recent call last): File "<interactive input>", line 1, in ? File "E:\Python23\Lib\site-packages\MySQLdb\cursors.py", line 95, in execute return self._execute(query, args) File "E:\Python23\Lib\site-packages\MySQLdb\cursors.py", line 114, in _execute self.errorhandler(self, exc, value) File "E:\Python23\Lib\site-packages\MySQLdb\connections.py", line 33, in defaulterrorhandler raise errorclass, errorvalue LookupError: unknown encoding: latin1_swedish_ci >>> conn.close() >>> conn = MySQLdb.connect(**cred) >>> def character_set_name(*args, **kwargs): return 'utf-8' ... >>> character_set_name() 'utf-8' >>> conn.close() >>> conn = MySQLdb.connect(**cred) >>> conn.character_set_name() 'latin1_swedish_ci' >>> import new >>> conn.character_set_name = new.instancemethod(character_set_name, conn, >>> conn.__class__) >>> conn.character_set_name() 'utf-8' >>> cur = conn.cursor() >>> cur.execute(insert, alpha) 1L >>> conn.close() >>> conn = MySQLdb.connect(**cred) >>> conn.character_set_name() 'latin1_swedish_ci' >>> cur = conn.cursor() >>> cur.execute(select) 2L >>> cur.fetchall() ((10L, '\xce\xb1'), (9L, 'a')) >>> conn.close() >>> conn = MySQLdb.connect(unicode='utf-8', **cred) >>> conn.character_set_name() 'latin1_swedish_ci' >>> cur = conn.cursor() >>> cur.execute(select) 2L >>> cur.fetchall() ((10L, u'\u03b1'), (9L, u'a')) >>> conn.close() >>> conn = MySQLdb.connect(**cred) >>> cur = conn.cursor() >>> cur.execute(select) 2L >>> cur.fetchall() ((10L, '\xce\xb1'), (9L, 'a')) >>> conn.close() >>> -- http://mail.python.org/mailman/listinfo/python-list