Re: SQLBindParameter() does not work with UTF-8 ?!

Norbert Matzke <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
ZIGLIO, Frediano, VF-IT wrote:
>> 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
>>
>>
> 
> It's strange that every time you implement a feature someone ask for another... well, this means that previous works as expected I hope :)
> WVARCHAR is currently in progress. I don't think is supported by 0.82 and have some problems (there is a failing test) under CVS HEAD. Test related to your problem should be utf8, I'll test with your string.
> 
> Actually I'm quite busy so I have no timeline for this issue.
> 
> freddy77
> 

I was not aware of the fact that utf-8 support is quite new to FreeTDS.
I have had a look at the documentation before I tried to use it, a few
days ago, and it seemed to me that by setting the Client Charset to
UTF-8 one can use a MS SQL Server like any other UTF-8 capable DMBS --
though MS SQL Server itself is not UTF-8 capable ! This is a very
valuable feature of FreeTDS !

Besides, if I understand correctly, requesting SQL_WVARCHAR vs. 
SQL_VARCHAR as SQL parameter type does not make any diffence to FreeTDS 
? Only the server will not_do/do a USC-2 --> CP1252 --> UCS-2
conversion with the data ? (assuming CREATE TABLE ... NVARCHAR() ..)

Norbert



_______________________________________________
FreeTDS mailing list
[email protected]
http://lists.ibiblio.org/mailman/listinfo/freetds
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.