
<promotional-plug> Actually... there is a "native" Oracle driver, or rather, one that uses the OCI. It's usable, but certainly not complete. http://cvs.sourceforge.net/viewcvs.py/haskell-libs/libs/takusen/src/ However, I've only tested it with bog-standard ASCII Cstrings (my NLS_LANG setting specifies WE8ISO8859P1), so I've no idea how well it works with Unicode. </promotional-plug> Have you tried fiddling with your NLS_LANG environment variable? This determines the charset your data is converted to when sent from the DBMS to the client. You can set it either in a .bat script (just for that session), or modify the registry setting in: HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME0 What's it currently set to? Alistair.
-----Original Message----- From: Santoemma Enrico [mailto:enrico.santoemma@beta80group.it] Sent: 27 January 2005 16:49 To: Krasimir Angelov Cc: glasgow-haskell-users@haskell.org Subject: R: Problem with DB and Char size (2)
This is exactly what happens: (btw, the same thing happens in Python, so the trouble must be in the Oracle odbc driver. But this is also what happens today to any Haskell business application which connects to Oracle, as - to my knowledge - there is no native Oracle driver for Haskell)
... stmt0 <- query c $ "select 'Ã' as TEST from dual" stmt1 <- query c $ "select '" ++ chr(195):chr(131):[] ++ "' as TEST from dual" stmt2a<- query c $ "select '" ++ [chr(195*256 + 131)] ++ "' as TEST from dual" stmt2b<- query c $ "select '" ++ [chr(131)] ++ "' as TEST from dual" stmt3 <- query c $ "select chr(195*256 + 131) as TEST from dual" ...
after execution on a UTF-8 Oracle9i instance: 0: "TEST", "\195\131" 1: "TEST", "\195\131\198\146" 2a: "TEST", "\198\146" 2b: "TEST", "\198\146" 3: "TEST", "\195\131"
0 is the reference: UTF-8 encoding of an A with a tilde on the top. 1 is UTF-8 encoding (by Oracle) of an already encoded UTF-8 string 2a and 2b show that the high byte is stripped: \198\146 is the UTF-8 encoding of chr(131) 3 is the only (almost useless) workaround I've found.
Of course, with 3 byte chars things get even more confused.
Enrico
-----Messaggio originale----- Da: Krasimir Angelov [mailto:kr.angelov@gmail.com] Inviato: giovedì 27 gennaio 2005 15.41 A: glasgow-haskell-users@haskell.org Oggetto: Re: Problem with DB and Char size (2)
On Thu, 27 Jan 2005 06:34:40 -0800, John Meacham
wrote: On Thu, Jan 27, 2005 at 04:23:52PM +0200, Krasimir Angelov wrote:
HSQL uses withCString internally. withCString strips the higher order bytes from Char.
You should be able to replace withCString with withUTF8String from my CWStringBasic module, which you can get from here: http://repetae.net/john/recent/src/HsLocale/CWStringBasic.hs
and is part of my bigger HsLocale project http://repetae.net/john/recent/out/HsLocale.html but just that one file should be enough if all you need is UTF8. John
Santoemma Enrico said that Oracle ODBC driver expects UCS-2 instead of UTF-8 so this will not help.
Krasimir
----------------------------------------- ***************************************************************** Confidentiality Note: The information contained in this message, and any attachments, may contain confidential and/or privileged material. It is intended solely for the person(s) or entity to which it is addressed. Any review, retransmission, dissemination, or taking of any action in reliance upon this information by persons or entities other than the intended recipient(s) is prohibited. If you received this in error, please contact the sender and delete the material from any computer. *****************************************************************
participants (1)
-
Bayley, Alistair