I found these lines in "dbdimp.c" must be the point.
line : 375 - 381
sv_setpvn(AvARRAY(av)[i], val, len);
SvUTF8_on(AvARRAY(av)[i]);
}
else {
sv_setsv(AvARRAY(av)[i], Nullsv);
SvUTF8_on(AvARRAY(av)[i]);
}
(included in sqlite_st_fetch)
If I comment out "SvUTF8_on", it seems to be no problem.
----- Original Message -----
From: "KAWAI,Takanori" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, March 25, 2002 9:53 AM
Subject: DBD::SQLite with Japanese Character problem
> Hi.
>
> 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
> 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
==============================================
Kawai, Takanori(Hippo2000)
Mail: [EMAIL PROTECTED] [EMAIL PROTECTED]
http://member.nifty.ne.jp/hippo2000
==============================================