UTF-8 support: What about N'xxx' string literals?

Sebastien FLAESCH <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Organization Four J's Development Tools
Message-ID <[email protected]>
Hi all,

Concerning UTF-8 / UNICODE support, I was wondering about the usage of N'xxx'
string literals in SQL statements (in ODBC or tsql commands)...

Actually if you want to specify a "UNICODE" (i.e. UCS-2) string in SQL Server,
you must prefix the string with a N :

create table tab1 ( k int, c nchar(10), nvarchar(10) )
go
insert into tab1 values (1, 'abc王鴻', 'abc王鴻傑王鴻傑' )
go
insert into tab1 values (2, N'abc王鴻', N'abc王鴻傑王鴻傑' )
go
select * from tab1
go

Otherwise, non-prefixed strings are converted by SQL Server to the default
code page of the database... (following docs).

Actually SQL Server docs talk about "Server side" programming, where strings
should use N prefix for UNICODE (UCS-2), but what about the clients then?

From my understanding, if I want to use UTF-8 encoded strings in my SQL stmts,
(defining my FreeTDS client charset as UTF-8 and forcing FreeTDS to convert from
UTF-8 to UCS-2 for TDS exchanges), I need always to specify N prefix to avoid
the server-side conversion to the database charset defined by the collation.

Since FreeTDS converts from any client charset to/from UCS-2 for TDS exchanges,
the final string literal will be encoded in UCS-2 and so the client is seen as
a UCS-2 client from the server... right?

So should not ALL FreeTDS application use the N prefix for string literals,
even if the encoding is for example ISO-8859-1?

Maybe some words about this could be added to:

http://www.freetds.org/userguide/localization.htm

Thanks!
Seb
_______________________________________________
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.