[linux] (met Perl) UTF8 data lezen vanuit een SyBASE database

Ronald Nooij ronald op ronsoft.nl
Wo mei 3 14:41:59 CEST 2006


Geachte lezer.

Al een aantal dagen zit ik me kapot te piekeren over een probleem wat ik heb.

Even een uitleg over de situatie.... die is als volgt.

Er is systeem A  (genaamd IRIS) en er is systeem B (genaamd GRID)
GRID bevat een SyBase database
IRIS leest met behulp van Perl en Sybase::DBlib (ver. 12.5) uit deze database.
Dit werkt al jaren goed en uiterst betrouwbaar.

GRID heeft nu haar database dusdanig ingericht, dat deze ook UTF8 tekens kan
bevatten. En daar begint de ellende. IRIS probeert deze data te lezen, maar
geeft uitsluitend vraagtekens terug waar eigenlijk een UTF8 teken zou moeten
staan.

Ten einde dit probleem op te lossen en te kijken waar het probleem precies zit,
heb ik het perl script terug gebracht tot het minimum wat nodig is om data te
lezen en op het scherm te tonen.
Ook ben ik aan de haal gegaan met DBI om een en ander te controleren en te
dubbel checken.

De situatie stand tot nu toe. Hoe hard ik ook probeer, Sybase::DBlib geeft
alleen maar vraagtekens waar ik eigenlijk een UTF8 karakter zou verwachten.
De DBI anderzijds is WEL in staat om de juiste data te tonen.
Door dit laatste kunnen we vrijwel zeker zeggen dat de terminal te juiste
instelling heeft (namelijk UTF8) en dat ook de SyBase database alsmede de
gebruikte Perl omgeving (5.8.5) met UTF8 tekens overweg kunnen.
Ik ga meer en meer de Sybase::DBlib verdenken.

Enige concrete wat ik kan vinden om met UTF 8 om te laten gaan is dit:
$charset = "utf8";
Sybase::DBlib::dbsetdefcharset($charset);
Echter geeft dit geen enkel zichtbaar resultaat. Er blijven vraagtekens
terugkomen.

Ik heb mijzelf ook al de vraag gesteld... waarom gebruik je dan niet gewoon de
DBI als die er wel goed meer overweg kan. Het antwoord was echter.... de perl
scripts die reeds lange tijd met succes gebruikt zijn, gebruiken Sybase::DBlib
Om deze scripts om te bouwen naar DBI zou een hele puist met werk zijn. Daarbij
kan ik me niet voorstellen dat en product als Sybase::DBlib niet met UTF8 om
zou kunnen gaan.

Heeft iemand nog een idee in welke richting ik zou moeten zoeken of wat ik zou
kunnen doen?
De API van Sybase::DBlib is dermate verschillend van DBI dat je niet zomaar even
de de Sybase::DBlib er uit sloopt en de DBI er voor in de plaats zet.

Ik heb 2 scripts van een regel of 20 die beiden uit de SyBase database lezen.
De een gebruikt de DBI de ander Sybase::DBlib.
Mocht iemand deze scripts in willen zien, moet hij even een gil geven.

Met vriendelijke groet,

Ronald




More information about the Linux mailing list