[freetds] Character conversion error with special characters (umlauts)

Stefan Axelsson Stefan.Axelsson at ltkalmar.se
Fri Jul 18 05:30:05 EDT 2008

Hello everyone,
After about a day of googling I've given up on tha path, so I'll bother you people instead.
Basically I've got an Ubuntu server with Apache, mod_perl and the usual stuff. I've written a simple webapp that communicates with an MSSQL 8 on a Win2K3 box. This is being done through the (I guess typical) method of Perl package (DBI) talking to unixODBC/FreeTDS that talks to the server.
Normal operation works great, no problems at all. But as soon as I showed my small app to my boss he broke it. I had totally forgotten to use non-english words when testing it (I'm a swede, but I code "in english" and thus I add test data in english too, old habit). So, adding words with åäö in an INSERT statement broke the application.
Checking logs gave me an error: [unixODBC][FreeTDS][SQL Server]Error converting client characters into server's character set. Some character(s) could not be converted.
Google helped me narrow it down, but I found no way to solve it. I've checked that iconv can translate it, it does so perfectly. I've tried some "common" special characters (like the ' ) and it works just fine. I've made sure I use nvarchar in the database (missed that at first, but changing it didn't help). My best guess atm is that the characters I want to use will "grow" during conversion (i.e. each byte becomes two bytes) between UTF-2 and UCS-2LE.
I've put the logfile for you to have a look at if that helps: http://pastebin.com/m3a90fc7b
Many thanks in advance,
Stefan Axelsson

More information about the FreeTDS mailing list