A large Perl application (10^4 .. 10^5 lines of code) has to work with
data on an MS SQL Server 2000 containing Unicode data in NVARCHAR
columns. Perl 5.8.6 (ActivePerl) runs on the same or another Windows
2000 Server (usually english or german). The Unicode data may contain
characters from all over the world, e.g. russian, chinese, arabic or
hebrew, among the usual latin characters. A separate application also
accesses the Database, performs some reporting and expects the data to
be valid Unicode.
DBD::ODBC returns all latin characters, german umlauts and french
accents, but replaces all non-latin characters with question marks
("?", ASCII 63). Also, all data returned from DBD::ODBC has the UTF8
Other DBDs for other databases, like DBD::Oracle for Oracle 9.2 and
DBD::Pg (with pg_enable_utf8=1) for PostgreSQL 8 work fine and return
unicode strings with an enabled UTF8 flag. Unfortunately, these two
databases are not sufficient, the application has to work with MS SQL
(not my idea).
DBD::ADO is unreliable, hangs and crashes, and seems to have a lot of
limitations that make the application stop working, but at least it sets
the UTF8 flag and returns unicode strings.
DBD::Sybase does not work at all, it complains about missing some entry
points in Sybases DLLs, and the documentation says that "?" placeholders
are not supported with MS SQL. All but two or three statements in the
application use "?" placeholders.
I spent three days searching Google, DBI docs and FAQ, and DBI and
DBD::ODBC sources for any hints, but without success.
Any ideas, hints, tips?
Please inform us immediately if this e-mail and/or any attachment was
transmitted incompletely or was not intelligible.
This e-mail and any attachment is for authorized use by the intended
recipient(s) only. It may contain proprietary material, confidential
information and/or be subject to legal privilege. It should not be copied,
disclosed to, retained or used by any other party.
If you are not an intended recipient then please promptly delete this
e-mail and any attachment and all copies and inform the sender.