[freetds] Using PHP mssql_init/bind for sending Unicode to Stored Procedures

ZIGLIO, Frediano, VF-IT Frediano.Ziglio at vodafone.com
Thu Jun 12 03:59:38 EDT 2008


> 
> Jason Young (Morgon) wrote:
> > perhaps it's simply a lack of NVARCHAR in the php_mssql 
> > library, but I cannot send UTF8 data to SQL Server using 
> > mssql_init/bind/execute - yet it's not a general fault in 
> my setup, as I
> > 
> > can "EXEC blah N'<UTF Text>'" just fine.
> 
> In the case of "EXEC blah N'<UTF Text>'", the data are 
> embedded in the SQL
> text, which is converted to UCS-2 in libtds just before it's 
> put on the
> wire.  I'm not sure what, if anything, "N'foo'" does for you; I would
> think "'foo'" would work just as well.  
> 
> In the case of dbrpcparam(), you're stuffing the data into a 
> buffer and
> telling the library the datatype. I'm not sure what happens 
> -- I haven't
> looked yet -- but *if* any conversion is done, it would be in libtds
> during dbrpcsend().  
> 
> It's a little tricky because dbrpcparam() accepts VARCHAR and NVARCHAR
> parameters. The libtds function that reads the parameter buffer must
> distinguish between (VAR)CHAR, which should be converted, and 
> N(VAR)CHAR,
> which is by definition UCS-2 (and doesn't need to be and can't be
> converted).  
> 
> src/dblib/unittests/rpc.c needs to be enhanced to test this 
> feature, to
> make sure we get it right.  Patches welcome!  
> 

I think that dblib does not support wide characters... but we can extend
it

freddy77



More information about the FreeTDS mailing list