MySQL collation und UTF-8...

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 16. Mai 2006, 21:19

Also ich arbeite ja gerade an PyLucid v0.7... Dabei möchte ich das unicode Thema nochmal anfassen. Allerdings hab ich da gerade ein paar Schwirigkeiten...

Wenn ich Daten aus der DB hole, sind diese vom Typ String.
Ich hab in MySQL die betreffenden Spalten/Tabellen mit Collation = utf8_unicode_ci versehen.
Das ich nicht direkt unicode bekomme kann ich ja noch verstehen, da muß ich mich wahrscheinlich direkt mit MySQLdb auseinandersetzten...

Ich habe allerdings getestet, direkt in meiner gewrappten fetchall()-Methode immer ein .decode("utf_8") zu machen, damit ich generell intern mit nur unicode hantieren muß...
Das geht allerdings nicht! mit einem .decode("utf_8") erhalte ich einen UnicodeError...Komisch ist allerdings, das es mit .decode("latin-1") funktioniert!

Weiß jemand Rat?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 16. Mai 2006, 21:40

Hab was bei http://bugs.mysql.com/bug.php?id=7976 gefunden:

Code: Alles auswählen

        self.cursor.execute('set character set utf8')
        self.cursor.execute('set names utf8')
Wenn ich das nach dem connect mache, erhalte ich zwar auch nicht direkt UTF-8, allerdings funktioniert dann ein .decode("utf_8"), so wie es soll! ;)

Ich hatte schon mal früher festgestellt, das es beim mySQLdb Modul einen Parameter use_unicode beim connect() gibt! Allerdings gibt es den erst ab einer bestimmten Version des Moduls...

Nun frage ich mich, ob ich nicht besser mit den obrigen SQL-Statements fahre...


Edit: So, jetzt weiß ich warum es mit "latin-1" klappt! Auszug aus "SHOW VARIABLES;"

Code: Alles auswählen

latin1  	character_set_client
latin1 	character_set_connection
utf8 	character_set_database
latin1 	character_set_results
latin1 	character_set_server
utf8 	character_set_system

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten