Thread [MySQL, Tk] Und nochmal: utf-8-kodierte Daten in Datenbank -> Tk::Text -> Datenbank (13 answers)
Opened by pktm at 2012-02-23 15:41

rosti
 2012-02-23 19:44
#156386 #156386
User since
2011-03-19
3463 articles
BenutzerIn
[Homepage]
user image
2012-02-23T18:08:19 pq
ich glaube, du musst mysql_enable_utf8 als attribut übergeben, nicht im DSN.
vielleicht geht das auch im DSN, aber das habe ich noch nie ausporobiert. schau mal, ob das einen unterschied macht.


Es kommt in die Hashref der Attribute, neben RaiseError, PrintError, AutoCommit...
Code (perl): (dl )
1
2
3
4
5
{
  RaiseError => 1,
  mysql_enable_utf8 => 1, # ab DBD Version ?? musst gucken, sorry ;)
  PrintError => 0,
}


und ermöglicht die vollständig zeichenorientierte Kommunikation über den DBI-Layer. Die Tabelle in MySQL muss da auch das Flag haben,

Code: (dl )
create ..()default charset utf8


dann geht auch sowas Select UPPER(name) mit UTF-8-kodierten Zeichen. Weitere Tests sind die Ausgabe der Länge mit Stringfunktionen in MySQL.

Dein Dump (pktm) zeigt, so wie ich sehen kann, die Oktetten, die jedoch zusammen utf-8-kodierte Umlaute (äöü) ergeben.

Wenn mysql_enable_utf8 nicht gesetzt ist, kriegst Du über DBI die Oktetten geliefert. Für eine Ausgabe auf STDOUT sind Oktetten ok. Mit Encode.pm kannst Du Oktetten zu UTF-8-kodierten Strings machen.

Sorry, ich hab mir das nicht ausgedacht, das ist in der Tat etwas verwirrend, was hilft:

So wie Perl-intern zwischen Oktetten und Zeichenketten unterscheidet, so muss der Programmierer auch seinen Code sehen, also immer wissen, sind das jetzt Oktetten oder UTF-8-kodierte Zeichenketten.

Viel Erfolg!
Rosti

View full thread [MySQL, Tk] Und nochmal: utf-8-kodierte Daten in Datenbank -> Tk::Text -> Datenbank