Hi, I just want to let you know about a strange behaviour I recently stumbled upon. For some outlandish reason on some of our servers we have DBD::Pg Version 2.99_2 installed (Seemed that it solved some problems in that time).
When reading file names with e.g. Umlauts from a directory, either via readdir() or glob() and storing them in a db these strings are not correctly returned from the DB. This does not appear when the strings are ordinary Perl Strings. Here is a little script, that illustrates the issue: All tests pass with 2.19.3 and fail with 2.99_2 #!/usr/bin/perl use strict; use warnings; use utf8; use Test::More; use DBI; use DBD::Pg; =cut SQL CREATE TABLE test ( id serial NOT NULL PRIMARY KEY , data varchar(256) , text TEXT ); =cut my $DSN = 'dbi:Pg:dbname=tester;host=mars.fotofinder.net'; my $dbh = DBI->connect($DSN, 'fotofinder', 'odarn', {}); my $select = $dbh->prepare("select * from test where id = ?"); my $insert = $dbh->prepare( "insert into test (data, text) VALUES (?,?)" ); Test::More::diag($DBD::Pg::VERSION); my @filenames = ( "./files/Köln", "æ©Liedel" ); #works #doesn't work as expected: #opendir (DIR, "./files"); #@filenames = readdir(DIR); #nor this: @filenames = glob("./files/*"); foreach my $file (@filenames) { next if ( $file =~ /CVS/ ); my $one = { data => $DBD::Pg::VERSION, text => $file, }; $insert->execute( $one->{'data'}, $one->{'text'} ); $one->{'id'} = $dbh->selectcol_arrayref("SELECT lastval()")->[0]; my $res = $dbh->selectall_arrayref($select, {Slice => {}}, $one->{'id'})->[0]; Test::More::cmp_ok( $res->{'text'}, "eq", $one->{'text'} ); } Test::More::done_testing(); Attached is a file with a German Umlaut in it's name. Hope that helps -- -- mit freundlichem Gruß, Frank Wesemann Fotofinder GmbH USt-IdNr. DE812854514 Software Entwicklung Web: http://www.fotofinder.com/ Potsdamer Str. 96 Tel: +49 30 25 79 28 90 10785 Berlin Fax: +49 30 25 79 28 999 Sitz: Berlin Amtsgericht Berlin Charlottenburg (HRB 73099) Geschäftsführer: Ali Paczensky
some content