Re: What SQL type for SQLBindParameter for NVARCHAR(MAX)/NTEXT when using UTF-8 locale?

Frediano Ziglio <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <CAHt6W4d40ebbeSPtwA-kMb3wKhyHV2JCLQv4p=K2=wn61i9OFg@mail.gmail.com>
2012/10/18 Sebastien FLAESCH <[email protected]>:
> Hello,
>
> I am using a UTF-8 encoding in my Linux FreeTDS client program,
> and want to insert LOB data into NVARCHAR(MAX)/NTEXT columns.
>
> For now, I bind the SQL Parameter with:
>
>          ctype = SQL_C_CHAR;
>          sqltype = SQL_LONGVARCHAR;
>          precision = 0x10000000;
>
> This works find as long as the data is ASCII (and probably also
> ISO-885901), but when using UTF-8 sequences, I get this error:
>
> SQL State: HY000
> SQL code : 2402
> [FreeTDS][SQL Server]Error converting characters into server's character set. Some character(s) could not be converted
>

Mmm... probably the encoding used by ODBC is not what you expected.
Try setting the ClientCharset attribute.

> I guess this is expected, because I use SQL_LONGVARCHAR...
>

Yes, longvarchar should be fine. I think FreeTDS should be smart
enough to use NVARCHAR(MAX) from protocol 7.2.

> For NCHAR/NVARCHAR types, I use SQL_WCHAR / SQL_WVARCHAR SQL types
> to bind my UTF-8 buffers, and this works fine.
>
> But for large objects, what SQL type should I use?
>
> I tried with SQL_WVARCHAR and a large size, without success:
>
>    [FreeTDS][SQL Server]Invalid string or buffer length
>

The encoding should be in SQLWCHAR with size in bytes usually (so
multiple of sizeof(SQLWCHAR)) and probably you still want the long
version (SQL_WLONGVARCHAR).

> How to specify the precision for a CLOB?
>
> As a comparison, with Easysoft SQL Server ODBC driver, you can bind
> UTF-8 buffers with:
>
>          ctype = SQL_C_CHAR;
>          sqltype = SQL_WVARCHAR;
>          precision = SQL_SS_LENGTH_UNLIMITED;
>

I wasn't even aware of this constant!
I don't understand why this extension is necessary...

> Thanks for reading, please let me know what I should use!
>
> Seb

Frediano
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.