Thread UTF-8 in Verbindung mit mysql (12 answers)
Opened by xtomcatx at 2008-09-13 06:08

xtomcatx
 2008-09-13 15:01
#114588 #114588
User since
2006-08-27
31 Artikel
BenutzerIn
[default_avatar]
Sollte etwa das das Ergebnis all meiner Mühen sein?
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
#!/usr/bin/perl
use strict;
use warnings;
use encoding "utf8";

use CGI;
use DBI;
use CGI::Carp qw( fatalsToBrowser );

my $cgi = CGI->new();
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( $! );
print "String: $string";
# String: ;Mühle

$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 encoding und NAMES auf utf8\n";
print "\# id $$_[0]: $$_[1]\n" foreach @$aRef ;
# zweiter Versuch mit encoding und NAMES auf utf8
# id 1: Mühle, über phpmyadmin eingefügt
# id 2: Mühle


Alle Testfälle haben bisher gepasst. Beinhaltet "use encoding 'utf8'" schon "use utf8"?

1. Nachtrag: Nein, tut es nicht. "use utf8" sorgt nur dafür, dass man z.B. Umlaute in Variablennamen verwenden kann. Ohne dieses Pragma ist es nicht möglich. Lasse ich dieses Pragma weg, funktioniert alles bestens, da ist es egal, ob "use encoding 'utf8'" verwendet wird oder nicht. Wenn "use utf8" allerdings verwendet werden soll, so muss scheinbar auch "use encoding 'utf8'" eingesetzt werden. Unter anderem scheint dieses die binmodes für STDERR/STDIN/STDOUT umzuschalten, aber irgendwas wird noch gemacht. Die Frage ist: was?

2. Nachtrag: Von "use encoding" wird meist abgeraten. Außerdem ist es nicht threadsafe. Was tun?

View full thread UTF-8 in Verbindung mit mysql