不管数据库的代码集是什么,utf-8是用于解码从DB2数据库检索到的数据的正确编码吗?
#!/usr/bin/env perl
use strict;
use warnings;
use DBI;
my ( $db, $dbh, $sth, $value );
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" );
printf "%v02X\n", $value;
$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" );
printf "%v02X\n", $value;
$sth->finish;
$dbh->disconnect;
# E2.82.AC
# E2.82.AC
1条答案
按热度按时间wbrvyc0a1#
DBD::DB2使用的编码由from the environment决定。
您可以使用
$dbh->get_info
查询数据库的编码和连接的编码。您应该查询
SQL_APPLICATION_CODEPAGE
,或者确保使用已知的代码页。