Thread UTF-8 in Verbindung mit mysql
(12 answers)
Opened by xtomcatx at 2008-09-13 06:08
Hallo zusammen,
nachdem ich eigentlich der festen Überzeugung war, den Bogen bei Unicode rauszuhaben, wurde ich heute eines besseren belehrt. Es ist mir nicht möglich, aus einer utf8-Tabelle etwas auszulesen und einzufügen, ohne dazwischen etwas am Zeichensatz zu pfuschen. Eine Umkodierung mittels Encode hatte ich auch nicht vor. Hier mal mein Beispiel Code: (dl
)
1 CREATE TABLE `test` ( Die Datei liegt in UTF8 ohne BOM vor: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #!/usr/bin/perl use strict; use warnings; use utf8; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; binmode STDERR, ":utf8"; use CGI; use DBI; use CGI::Carp qw( fatalsToBrowser ); my $cgi = CGI->new(); $cgi->charset("utf8"); print $cgi->header( -type => "text/plain", -charset => "UTF-8" ); my $aRef; my $query = "REPLACE INTO test SET id = 2, text = ?;"; my $string = "Mühle"; my $dbi = DBI->connect( "DBI:mysql:test", "test", "test", { RaiseError => 1, mysql_enable_utf8 => 1 } ) or die( $! ); $dbi->do($query, undef, $string); $aRef = $dbi->selectall_arrayref( "SELECT id, text FROM test ORDER BY id" ); print "\n\n\# erster Versuch mit NAMES auf Standard\n"; print "\# id $$_[0]: $$_[1]\n" foreach @$aRef ; # erster Versuch mit NAMES auf Standard # id 1: Mühle, über phpmyadmin eingefügt # id 2: Mühle (phpmyadmin ebenfalls falsch) $dbi->do("SET NAMES utf8"); $dbi->do($query, undef, $string); $aRef = $dbi->selectall_arrayref( "SELECT id, text FROM test ORDER BY id" ); print "\n\n\# zweiter Versuch mit NAMES auf utf8\n"; print "\# id $$_[0]: $$_[1]\n" foreach @$aRef ; # zweiter Versuch mit NAMES auf utf8 # id 1: Mühle, über phpmyadmin eingefügt # id 2: Mühle (in phpmyadmin korrekt) $dbi->do($query, undef, $string); $dbi->do("SET NAMES latin1"); $aRef = $dbi->selectall_arrayref( "SELECT id, text FROM test ORDER BY id" ); print "\n\n\# dritter Versuch mit NAMES auf utf8 fürs einfügen und auf latin1 fürs auslesen\n"; print "\# id $$_[0]: $$_[1]\n" foreach @$aRef ; # dritter Versuch mit NAMES auf utf8 fürs einfügen und auf latin1 fürs auslesen # id 1: Mühle, über phpmyadmin eingefügt # id 2: Mühle (in phpmyadmin auch korrekt) $dbi->do($query, undef, $string); $dbi->do("SET NAMES utf8"); $aRef = $dbi->selectall_arrayref( "SELECT id, text FROM test ORDER BY id" ); print "\n\n\# vierter Versuch mit NAMES auf latin1 fürs einfügen und auf utf8 fürs auslesen\n"; print "\# id $$_[0]: $$_[1]\n" foreach @$aRef ; # vierter Versuch mit NAMES auf latin1 fürs einfügen und auf utf8 fürs auslesen # id 1: Mühle, über phpmyadmin eingefügt # id 2: Mühle (in phpmyadmin ebenfalls falsch) Kann mir jemand sagen, wie ich mysql oder perl auf die Sprünge helfen kann, um diese Umschalterei zu vermeiden? Der Schalter mysql_enable_utf8 bringt überhaupt keine Änderung. Viele Grüße Martin |