Thread mysql query tabellarisch ausgeben (3 answers)
Opened by thoss51 at 2012-09-30 17:54

pq
 2012-09-30 18:09
#162242 #162242
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
das problem hatten wir hier vor kurzem ganz ähnlich schonmal.
sehr wahrscheinlich ist, dass du die daten in utf8 vorliegen, aber nicht dekodiert.
dazu müsstest du uns ein paar informationen geben.
am besten einen einzelnen string mit umlauten mal folgendermassen ausgeben:
Code (perl): (dl )
1
2
use Devel::Peek;
Dump $string;

an der ausgabe siehst du in der regel, ob der string utf-8kodiert ist oder nicht.

hier 2 beispiele:

utf8, nicht dekodiert:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
perl -wE'
use Devel::Peek;

my @rows = (
["foo","bär","baz"],
["foo","bar","baz"],
);
Dump $rows[0]->[1];
for my $row (@rows) {
printf "%-6s | %-6s | %-6s\n", @$row
}'
SV = PV(0xda5c98) at 0xda7b98
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0xdce050 "b\303\244r"\0
CUR = 4
LEN = 8
foo | bär | baz
foo | bar | baz


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
perl -wE'
use Devel::Peek;

use utf8; # strings direkt im skript werden automatisch dekodiert
binmode STDOUT, ":encoding(utf-8)";

my @rows = (
["foo","bär","baz"],
["foo","bar","baz"],
);
Dump $rows[0]->[1];
for my $row (@rows) {
printf "%-6s | %-6s | %-6s\n", @$row
}'
SV = PV(0x15a8298) at 0x15a3d28
REFCNT = 1
FLAGS = (POK,pPOK,UTF8)
PV = 0x15a10b0 "b\303\244r"\0 [UTF8 "b\x{e4}r"]
CUR = 4
LEN = 8
foo | bär | baz
foo | bar | baz

du siehst, dass das ä im ersten beispiel als \303\244 hinterlegt ist. damit zählt es als 2 bytes. im 2. beispiel ist es \x{e4} und wird als 1 character gezählt.

siehe auch http://perlgeek.de/de/artikel/charsets-unicode

edit: in mysql kann man in den optionen beim connect die option mysql_enable_utf8 angeben, dann werden die daten automatisch dekodiert, sofern die entsprechenden tabellen/columns richtig deklariert sind. ansonsten musst du das selber mit Encode::decode_utf8() machen.
Last edited: 2012-09-30 18:12:21 +0200 (CEST)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread mysql query tabellarisch ausgeben