use "set names '$db_encoding'" to for MySQL to get
authorDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 6 Nov 2008 10:37:17 +0000 (10:37 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 6 Nov 2008 10:37:17 +0000 (10:37 +0000)
correct character encoding in generated Excel

git-svn-id: svn://svn.rot13.org/SQL2XLS@22 2e857b76-582b-47e5-ad5c-b3ba0f0ee29b

sql2xls.cgi

index 939a500..00e484f 100755 (executable)
@@ -118,7 +118,16 @@ if ($ENV{GATEWAY_INTERFACE} && $ENV{GATEWAY_INTERFACE} =~ m/CGI/i) {
 
 my $date_format = $workbook->add_format(num_format => $xls_date_format);
 
-my $dbh = DBI->connect($dsn . $database,$user,$passwd, { RaiseError => 1, AutoCommit => 0 }) || die $DBI::errstr;
+our $dbh;
+sub use_database {
+       $dbh->disconnect if $dbh;
+       my $database = shift || return;
+       print STDERR "## connect to $database\n" if $debug;
+       $dbh = DBI->connect($dsn . $database,$user,$passwd, { RaiseError => 1, AutoCommit => 0 }) || die $DBI::errstr;
+       $dbh->do( qq{ set names '$db_encoding'; } ) if $db_encoding && $dsn =~ m{mysql};
+}
+
+use_database( $database );
 
 sub _c {
        return shift unless $db_encoding;
@@ -144,9 +153,7 @@ foreach my $sql_file (@sql_files) {
        while(<SQL>) {
                chomp;
                if (/^\\c\s+(\S+)/) {
-                       $dbh->disconnect if $dbh;
-                       print STDERR "## connect to $1\n" if $debug;
-                       $dbh = DBI->connect($dsn . $1,$user,$passwd, { RaiseError => 1, AutoCommit => 0 }) || die $DBI::errstr;
+                       use_database( $1 );
                } elsif (/^--(.+)/) {
                        $comment.=$1;
                } else {