Database encoding not recognized by DBD::Pg

Vincent Veyron <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.general
Message-ID <[email protected]>
Hi,

I have the following setup : Workstation, Primary, and Backup servers all running on a current version of Debian Stable. All run an identical LAMP stack of Apache/Mod_perl/Postgresql, except for default locale (see below). DBD::PG version is 3.0.0

My perl modules misbehave when connecting to a UTF8 encoded database on the backup server *only*. The link below shows the result of Data::Dumper, decode, and data_string_desc for each machine, for a record containing accented characters.

http://vincentveyron.com/tmp/tmp.html

I have 2 questions :

- Why does data_string_desc return 'UTF8 off' all servers, when the database is UTF8 encoded?

- What should I inspect to understand why data_string_desc gets a wrong number of characters in the backup server?

#
#/etc/default/locale for each server 
#
#Workstation
LANG=fr_FR.UTF-8

#Primary
LANG=fr_FR@euro
LANGUAGE=fr_FR:fr

#Backup
LANG=fr_FR@euro


#
#Code used for the example
#
package Mysite::utf8_db_handle ;

use strict ;
use warnings ;

use DBI qw(:utils) ;

use Data::Dumper ;

use Encode qw (decode) ;

use Apache2::Const -compile => qw (OK REDIRECT) ;

sub handler {

    my $r = shift ;

    my $dbh = DBI->connect_cached( "DBI:Pg:dbname=bla_2", 'www-data', undef, {
	PrintError => 1,
	RaiseError => 1,
	AutoCommit => 1,
	pg_bool_tf => 't'
				  } ) ;

    my $sql = 'SELECT prenom FROM tblclient where id_client=2' ;

    my $result_set = $dbh->selectall_arrayref($sql) ;

    my $content = '<h1>Mysite</h1>' ;
    
    $content = '<h2>Not decoded, using Data::Dumper</h2>' ;

    $content .= '<pre>' ;

    $content .= Dumper($result_set) ;
    
    $content .= '</pre>' ;

    $content .= '<h2>Decoded using decode(UTF8,...</h2>' ;

    $content .= '<p>' . ( decode('UTF8', $result_set->[0]->[0] ) || 'wtf?' ) . '</p>' ;

    $content .= '<h2>data_string_desc</h2>' ;

    $content .= '<p>' . data_string_desc($result_set->[0]->[0]) . '</p>' ;

    $r->content_type('text/html; charset=UTF-8') ;

    $r->no_cache(1) ;

    print $content ;

    return Apache2::Const::OK ;

}

1 ;



-- 
					Salutations, Vincent Veyron

http://marica.fr/
Gestion des contentieux, des dossiers de sinistres assurance et des contrats pour le service juridique
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.