On Jun 3, 2010, at 8:14 PM, Dave Rolsky wrote:

> On Thu, 3 Jun 2010, Michael Peppler wrote:
> 
>> Which version of Sybase, which version of Sybase OpenClient, and which 
>> version of DBD::Sybase?
> 
> Ah, I was using the old libs (11.0), which may have been the problem. I was 
> also using DBD::Sybase 1.07.
> 
> I switch to Sybase 15.0 (OCS 15.0 if that makes sense), OpenClient 15.0 libs, 
> and DBD::Sybase 1.10.
> 
> Now it's closer to working. If I set "charset=utf8" in the dsn, I get
> 
> 2010/06/03 14:08:11 unicode CRITICAL: FATAL: DBD::Sybase::db do failed: 
> Server message number=2402 severity=16 state=1 line=1 server=HDATADEV1 
> text=Error converting characters into server's character set. Some 
> character(s) could not be converted.
> 
> I'm not sure what that means.

Hmmm - is that on a query, or on an insert operation?


> If I _don't_ set that, the data goes in and comes out as bytes, rather than 
> the bizarro hex string. However, the data does have the utf8 flag set when it 
> comes back from Sybase, so I have to run it through Encode::decode.
> 
> I really don't think I can realistically tell the bazillion developers here 
> "just run all the data through Encode".
> 
> I'd really like see an end-to-end solution.

I agree - I've just not had much opportunity (or requests) to ensure that this 
works 100%.

Ideally if you could send me some sample code, and a simple table structure and 
data that reproduces the problem for you I could try to look at it and see if I 
can fix it.


> Also, it's not clear to me that the data is actually being stored as 
> characters at the Sybase level. I'm not even sure how I'd figure this out. 
> When I do a select from sqsh, I see the wacky hex string, but I can't tell if 
> that's Sybase trying to present data to me in a format it thinks my 
> environment can handle.

When in doubt - use the Sybase tools (i.e. isql, and use -Jutf8 to force 
conversion to/from utf8 when reading/writing the data).

You can also do a convert(varbinary, the_univarchar_col) to see the hex 
representation of the data in the database.

> 
> Basically, what I need is to be able to take Perl native unicode strings, 
> store them in Sybase in Sybase's native format (utf16, I believe), and then 
> retrieve them as Perl native unicode strings again.

If you store data in univarchar, etc columns, then it's utf16. You can also set 
up the dataserver to use utf8 throughout - but that's something you'd have to 
discuss with your DBAs.

Michael
--
Michael Peppler
Sybase on Linux FAQ: http://www.peppler.org/FAQ/linux.html

"A successful [software] tool is one that was used to do something undreamed of 
by its author." -- S. C. Johnson   






Reply via email to