DB2:无论数据库代码集如何,我都应该使用 utf8 解码获取的数据吗?

问题描述 投票:0回答:0

如下图所示:我是否应该使用 utf8 解码从 DB2 数据库中获取的数据,而不考虑数据库代码集?

#!/usr/bin/env perl
use strict;
use warnings;
use Encode::Locale;
binmode STDOUT, ':encoding(console_out)';
use Data::Dumper;
use DBI;
use Encode qw( decode_utf8 );

my ( $db, $dbh, $sth, $value, $decoded );
my $table = 'mytablename';
my $user = 'user';
my $password = 'passwd';
my $char = "\x{20ac}"; # €

# ISODB code set = ISO885915
$db = 'ISODB';
$dbh = DBI->connect( "dbi:DB2:$db", $user, $password ) or die DBI->errstr;
$dbh->do( "DROP TABLE $table" );
$dbh->do( "CREATE TABLE $table (Name VARCHAR(32))" );
$sth = $dbh->prepare( "INSERT INTO $table (Name) VALUES(?)" );
$sth->execute( $char );
( $value ) = $dbh->selectrow_array( "SELECT Name FROM $table" );
$decoded = decode_utf8( $value );
print Dumper $decoded;
$sth->finish;
$dbh->disconnect();

# UTFDB code set = utf-8
$db = 'UTFDB';
$dbh = DBI->connect( "dbi:DB2:$db", $user, $password ) or die DBI->errstr;
$dbh->do( "DROP TABLE $table" );
$dbh->do( "CREATE TABLE $table (Name VARCHAR(32))" );
$sth = $dbh->prepare( "INSERT INTO $table (Name) VALUES(?)" );
$sth->execute( $char );
( $value ) = $dbh->selectrow_array( "SELECT Name FROM $table" );
$decoded = decode_utf8( $value );
print Dumper $decoded;
$sth->finish;
$dbh->disconnect;
# $VAR1 = "\x{20ac}";
# $VAR1 = "\x{20ac}";
perl character-encoding db2 dbi
© www.soinside.com 2019 - 2024. All rights reserved.