in reply to Re: Trouble with Perl MySQL Arabic
in thread Trouble with Perl MySQL Arabic

Is there anything else different between the two data versions besides the schema?
Nope, same machine same, MySQL server.
When you say "with the same viewer", what is that
Navicat MySQL. Same when I export the files to Excel and look at them with that.
is your perl script running on Red Hat 9 with perl 5.8.0
Running windoze with 5.8.4
Have you tried using the "msqlimport" tool
It's a good suggestion, and I may try it if I get desperate. I'm trying to do this with Perl bc this is a friend's db that's in MS Access an is not normlized. So I'm trying to both get it into MySQL and rearrange the tables. Navicat MySQL does the import from MS Access to MySQL fine so now I'm trying to move from the schema that was imported from Access to a new refactored schema.

Replies are listed 'Best First'.
Re^3: Trouble with Perl MySQL Arabic
by graff (Chancellor) on Aug 20, 2006 at 23:22 UTC
    I don't think mysqlimport should be left as a "last desperate measure", and I don't see why your situation would disfavor it, so my advice would be to try that next. Any other cp1256-based tool you have that can do Arabic display should be able to show the plain-text file that you dump from the old table, to confirm that the data is okay up to that point. Then, load to and dump from the new table, and the data should be basically the same (especially if you sort it the same way from both versions).

    If the data in the "fixed" table still looks buggy, you might try the following alterations to the OP code, just to see if this makes a difference (I don't know whether it will):

    use Encode; # add this near the top my $sqlstatement = 'select name_arabic from data'; my $sth = $dbh->prepare($sqlstatement); $sth->execute || die "Could not execute MySQL statement: $sqlstatement +"; my @row; my @cases; # if handling only one field, let's make this a plain array while (@row=$sth->fetchrow_array) { # explicitly convert to utf8 (die +on failure) push @cases, decode( 'cp1256', $row[0], Encode::FB_CROAK ); } $sth->finish(); # optimize a little: the insert statement only needs to be prepared on +ce $sqlstatement = 'insert into newdb.names (arabicname) values (?)'; $sth = $dbh->prepare($sqlstatement); for my $i (0..$#cases) { # now explicitly convert back to cp1256 $sth->execute( encode( 'cp1256', $cases[$i] )) or die "putsql could not execute MySQL statement: $sqlstateme +nt"; } $sth->finish();
    (updated to remove redundant "my" declarations on $sqlstatement and $sth)