Make sure you are running the latest stable version of DBD::ODBC (currently 1.23).
Make sure it is build with Unicode support (Default enabled on Windows, Default disabled on non-Windows systems).
Read the documentation of DBD::ODBC, especially the parts documenting Unicode support.
Read it again.
Really, read it again. DBD::ODBC supports Unicode (I wrote the initial patch, and MJE improved it), but don't try to be smarter than DBD::ODBC. Just pass the perl strings to DBD::ODBC.
Make sure all strings passed to $sth->execute contain the characters in perls own internal representation (i.e. UTF-8, with UTF-8-Flag set).
Don't mess with $dbh->quote, execute() takes care of properly quoting the values. You are quoting twice, that won't work at all. You do not need the N"xxx" notation, DBD::ODBC and the ODBC driver will take care of all that.
Get rid of $dbh->{odbc_default_bind_type} = 12; # SQL_VARCHAR. It won't work. It is the wrong data type (no Unicode support).
And by the way, use the three-arument form of open with a "my" variable, like this: open my $handle,'>>','file.ext' or die "Can't open file.ext for writing: $!".
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)