python - Problem beim Speichern von Unicode-Zeichen in MySQL mit Django

Ich habe die Zeichenfolge

 u"Played Mirror's Edge\u2122"

Welches sollte als angezeigt werden

 Played Mirror's Edge™

Aber das ist ein anderes Problem. Mein Problem ist, dass ich es in ein Modell stecke und dann versuche, es in einer Datenbank zu speichern. AKA:

a = models.Achievement(name=u"Played Mirror's Edge\u2122")
a.save()

Und ich bekomme:

'ascii' codec can't encode character u'\u2122' in position 13: ordinal not in range(128)

Full Stack Trace (wie gewünscht):

Traceback:
File "/var/home/ptarjan/django/mysite/django/core/handlers/base.py" in get_response
  86.                 response = callback(request, *callback_args, **callback_kwargs)
File "/var/home/ptarjan/django/mysite/yourock/views/alias.py" in import_all
  161.     types.import_all(type, alias)
File "/var/home/ptarjan/django/mysite/yourock/types/types.py" in import_all
  52.     return modules[type].import_all(siteAlias, alias)
File "/var/home/ptarjan/django/mysite/yourock/types/xbox.py" in import_all
  117.             achiever = self.add_achievement(dict, siteAlias, alias)
File "/var/home/ptarjan/django/mysite/yourock/types/base_profile.py" in add_achievement
  130.                 owner       = siteAlias,
File "/var/home/ptarjan/django/mysite/django/db/models/query.py" in get
  304.         num = len(clone)
File "/var/home/ptarjan/django/mysite/django/db/models/query.py" in __len__
  160.                 self._result_cache = list(self.iterator())
File "/var/home/ptarjan/django/mysite/django/db/models/query.py" in iterator
  275.         for row in self.query.results_iter():
File "/var/home/ptarjan/django/mysite/django/db/models/sql/query.py" in results_iter
  206.         for rows in self.execute_sql(MULTI):
File "/var/home/ptarjan/django/mysite/django/db/models/sql/query.py" in execute_sql
  1734.         cursor.execute(sql, params)
File "/var/home/ptarjan/django/mysite/django/db/backends/util.py" in execute
  19.             return self.cursor.execute(sql, params)
File "/var/home/ptarjan/django/mysite/django/db/backends/mysql/base.py" in execute
  83.             return self.cursor.execute(query, args)
File "/usr/lib/pymodules/python2.5/MySQLdb/cursors.py" in execute
  151.             query = query % db.literal(args)
File "/usr/lib/pymodules/python2.5/MySQLdb/connections.py" in literal
  247.         return self.escape(o, self.encoders)
File "/usr/lib/pymodules/python2.5/MySQLdb/connections.py" in string_literal
  180.                 return db.string_literal(obj)

Exception Type: UnicodeEncodeError at /import/xbox:bob
Exception Value: 'ascii' codec can't encode character u'\u2122' in position 13: ordinal not in range(128)

Und der relevante Teil des Modells:

class Achievement(MyBaseModel):
    name = models.CharField(max_length=100, help_text="A human readable achievement name")

Ich verwende dazu ein MySQL-Backend in meiner settings.py

DEFAULT_CHARSET = 'utf-8'

Also, wie zum Teufel soll ich mit all dem Unicode-Zeug umgehen? Ich hatte gehofft, es würde alles "nur funktionieren", wenn ich mich von lustigen Zeichensätzen fernhalten und an UTF8 festhalten würde. Leider scheint es nicht so einfach zu sein.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage