Seite 1 von 1
_mysql Modul mit unicode nutzen
Verfasst: Dienstag 2. Februar 2010, 12:40
von dj pogo
Hallo Freunde,
ich möchte mit dem "_mysql" Modul eine Datenbank auslesen deren Daten alle in utf-8 gehalten sind.
Kann mir jemand erklären wie ich dem "_mysql" Modul nun sage das er unicode nutzen soll?
db = _mysql_connect(host,user,pass,name)
print db.character_set_name()
> latin
Mit Vorfreude auf eure Hilfe verbleibe ich
mit vielen Grüßen
dj pogo
Verfasst: Dienstag 2. Februar 2010, 13:07
von Hyperion
Ich verweise mal wieder auf die beiden "Standard"-Seiten:
http://wiki.python-forum.de/Von%20Umlau ... 0Encodings
http://wiki.python-forum.de/User%20Grou ... folien.pdf
Wichtige Aussage (bei der ich selber lange gebraucht habe, das zu akzeptieren UND zu verstehen - daher auch der Verweis auf die Folien

)
utf-8 != unicode
Afaik übermittelt die DB doch das intern verwendete Encoding?
Verfasst: Dienstag 2. Februar 2010, 13:41
von jens
Verfasst: Dienstag 2. Februar 2010, 14:03
von dj pogo
ich hatte die Hoffnung das es auch direkt mit _mysql geht, ohne MySQLdb. Jetzt muss ich mein Skript wohl doch auf MySQLdb umstellen.
Scahde.
Verfasst: Dienstag 2. Februar 2010, 16:21
von Hyperion
dj pogo hat geschrieben:ich hatte die Hoffnung das es auch direkt mit _mysql geht, ohne MySQLdb. Jetzt muss ich mein Skript wohl doch auf MySQLdb umstellen.
1.) Wieso willst Du denn "_mysql" nutzen?
2.) Ist immer noch nicht geklärt, welches Encoding zurückgeliefert wird. Wenn Du weißt, dass Du in Deiner DB utf-8 verwendest, kannst Du die Daten ja auch selber in Unicode wandeln in Deiner Applikation!
3.) Wieso eigentlich hast Du das nicht im DB-Subforum gepostet?
EDIT (jens): verschoben 
Verfasst: Dienstag 2. Februar 2010, 16:48
von dj pogo
Hallo Freunde!
zu 1): Das Skript ist schon mit _mysql geschrieben und daher will ich das auch weiter benutzen
zu 2) Es kam ascii (oder ascii ähnliches) an.
zu 3) Ich hatte die Suche zu dem Thema bemüht, die hatte mich hier hin verschlagen und daher habe ich hier den Thread eröffnet. Sorry
zu 4) Hab ich es doch hinbekommen.
db = _mysql.connect(db['host'],db['user'],db['pass'],db['name'])
db.set_character_set('utf8')
Nach diesem Befehl weiß der mySQL Konnektor das er die ankommenden Daten als "utf8" interpretieren soll. Jetzt kommen die Daten (é etc.) direkt richtig raus, ohne das ich sie per unicode() noch umwandeln muss.
Danke für eure Aufmerksamkeit & bis bald.
Viele Grüße
dj pogo
Verfasst: Dienstag 2. Februar 2010, 17:01
von Hyperion
dj pogo hat geschrieben:
zu 2) Es kam ascii (oder ascii ähnliches) an.
Na das sagt wenig aus...
zu 4) Hab ich es doch hinbekommen.
db = _mysql.connect(db['host'],db['user'],db['pass'],db['name'])
db.set_character_set('utf8')
Nach diesem Befehl weiß der mySQL Konnektor das er die ankommenden Daten als "utf8" interpretieren soll. Jetzt kommen die Daten (é etc.) direkt richtig raus, ohne das ich sie per unicode() noch umwandeln muss.
Auch wenn das jetzt leicht OT wird: Was liefert denn der Konnektor zurück: Unicode oder Bytes? Bei ersterem ist klar, dass er das Encoding wissen muss (indem man es explizit angibt). Bei zweiterem muss er doch eigentlich nur stumpf die Daten im selben Encoding, wie sie in der DB gespeichert sind, anliefern. Diese muss man dann als Anwender manuell in Unicode decodieren (was sicher weniger praktisch ist).
Also wie verhält sich das Modul jetzt?
Hoffe auf Erleuchtung!
