_mysql Modul mit unicode nutzen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
dj pogo
User
Beiträge: 6
Registriert: Donnerstag 14. Januar 2010, 08:51

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
dj pogo
User
Beiträge: 6
Registriert: Donnerstag 14. Januar 2010, 08:51

ich hatte die Hoffnung das es auch direkt mit _mysql geht, ohne MySQLdb. Jetzt muss ich mein Skript wohl doch auf MySQLdb umstellen.

Scahde.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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? :-D

EDIT (jens): verschoben ;)
dj pogo
User
Beiträge: 6
Registriert: Donnerstag 14. Januar 2010, 08:51

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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! :-)
Antworten