[freetds] SQLBindParameter() does not work with UTF-8 ?!

Norbert Matzke matzke at geopp.de
Fri Oct 10 10:07:08 EDT 2008


Problem: My client ODBC application needs to bind parameters which are
UTF-8 encoded to SQL insert/update statements.
I have set ClientCharset to UTF-8 in freetds.conf.

I did some tests with Version 0.82 of FreeTDS and SQL Server 2005.
Seemed to work, but not with a short UTF-8 String like '€'.
'€' is 3 bytes long in UTF-8 encoding.

If I called
SQLBindParameter( , ,SQL_C_CHAR, SQL_WVARCHAR, n, 0, , , &ind )
with n=1 and *ind=3 I got an error message. iconv was not able to
convert '€' and SQL Server complains also ...

Calling with n=3 and *ind=3 succeeds but inserts the string '€  ' into
the database because the Server pads with 2 blanks to the requested size
of 3 CHARS.

Setting *ind=SQL_NTS did not help.

I have tested version 0.83dev 2008-10-09 also: It did not work at
all using UTF-8 strings with non single byte UTF-8 characters.

So I have had a look at what is going on inside the FreeTDS code
(ver. 0.83dev) and found that the problem arises due to insufficient
buffer space for the bounded parameter.

I solved the problem with very small changes to tds/mem.c and
odbc/sql2tds.c (see attached patch). For me it works now.

Any comments on this issue ?

Best regards,
Norbert

-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch_freetds_0.83dev20081009.diff
Type: text/x-patch
Size: 2159 bytes
Desc: not available
Url : http://lists.ibiblio.org/pipermail/freetds/attachments/20081010/9f1c2518/attachment.bin 


More information about the FreeTDS mailing list