web app breakage with utf-8

Justin Ezequiel justin.mailinglists at gmail.com
Fri Jul 7 03:19:50 EDT 2006


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()
>>>




More information about the Python-list mailing list