At Mon, 25 Mar 2002 09:53:06 +0900,
KAWAI,Takanori <[EMAIL PROTECTED]> wrote:
> When I use a value from DBD::SQLite added with
> Japanese character, they will be changed to insert \xC2 into
> each bytes (ex. \xa4xa2 + \x31 -> \xc2\xa4\xc2\xa2\x31).
> But with ASCII characters, DBD::mysql or unpacked-packed,
> there is no problem. I can't find out why.
> Would anyone tell me why?
>
> [Environment]
> perl : v5.6.1 built for sun4-solaris
I'm not good in Perl-internals including XS, thus I can't suggest a
patch. Sorry for it.
I can reproduce the problem with perl 5.6.1 for FreeBSD, but nothing
with perl 5.005_03.
But if I put
use bytes;
in top of the script, the problem has gone away (i.e. result has
become as exepected).
> DBI : 1.13
> DBD::SQLite : 0.12
> DBD::mysql :2.0410
>
> [Source]
> #!/bin/perl
> use strict;
> use DBI;
> sub testFunc($);
> my $hDb1 = DBI->connect('dbi:SQLite:test', '', '',
> {AutoCommit=>0, RaiseError=>1});
> my $hDb2 = DBI->connect('dbi:mysql:dbname=hippo2000', 'hoge', 'hoge',
> {AutoCommit=>1, RaiseError=>1});
> print "$DBD::SQLite::VERSION\n";
> print "\nCASE 1:\n";
> testFunc($hDb1);
> print "\nCASE 2:\n";
> testFunc($hDb2);
> $hDb1->disconnect;
> $hDb2->disconnect;
>
> sub testFunc($) {
> my($hDb) = @_;
> my $raD;
> my ($sWk1, $sWk2, $sWk3, $sWk4, $sPre, $sNew);
> my $sJpn = "\xA4\xA2"; #Japanse character A (HIRAGANA)
> my $sAsc = 'AB';
> eval {$hDb->do('DROP TABLE TEST');};
> $hDb->do('CREATE TABLE TEST (TESTID INTEGER)');
> $hDb->do('INSERT INTO TEST VALUES(1)');
> my $hSt = $hDb->prepare('SELECT TESTID FROM TEST');
> $hSt->execute;
> $raD = $hSt->fetchrow_arrayref();
> $sPre = $raD->[0];
> $sNew = pack('H*', unpack('H*', $raD->[0]));
> $sWk1 = $sJpn . $sPre;
> $sWk2 = $sJpn . $sNew;
> $sWk3 = $sAsc . $sPre;
> $sWk4 = $sAsc . $sNew;
> print "SAME? : ", ($sPre eq $sNew)? 'SAME': 'DIFF', "\n";
> print unpack('H*', $sWk1) , "\n";
> print unpack('H*', $sWk2) , "\n";
> print unpack('H*', $sWk3) , "\n";
> print unpack('H*', $sWk4) , "\n";
> $hSt->finish;
> }
>
> [result]
> 0.12
>
> CASE 1:
> SAME? : SAME
> c2a4c2a231
> a4a231
> 414231
> 414231
>
> CASE 2:
> SAME? : SAME
> a4a231
> a4a231
> 414231
> 414231
--
Tatsuhiko Miyagawa