Hi
Why does hu.dwim.rdbms.oralce not support utf-8 when it comes to connection encodings?
( database encodings supported are utf-8 and us-ascii )
Could that be related to my problem? Doesn't make sense except maybe this was written for cmucl? (a wild guess?)
I can't test this easily because I don't have a 32bit unix installed.
Maybe that's important: I entered the data (symtag_key varchar2, nvarchar2 datatype) into the tables with sqlplus.
But I got the same results (empty spaces/boxes in strings with sbcl started from the shell doing [select "SYMTAG_KEY" from symtag])
entering the data with hu.dwim.rdbms's insert-record function if I did not miss something.
Do you know of a hu.dwim.rdbms.oracle + oracle setup that actually works?
If so what operating system and oracle product is part of this setup?
Sqlplus has no problems showing me the data in both cases:
1. entering the data with sqlplus
2. entering the data with using hu.dwim.rdbms's insert-record
SQL> select "SYMTAG_KEY" from symtag2;
SYMTAG_KEY
----------------------
foo
foobar
SQL> select "SYMTAG_KEY" from symtag;
SYMTAG_KEY
--------------------------------------------------------------------------------
foo
foobar
foo11
If we can't solve this soon I will have to go with ascii or dig into the source code myself.
Have you any hints for the latter?
Regards,
chris
*** 0. no utf-8 connection encoding
** hu.dwim.rdbms/source/oralce/backend.lisp
... (starts line 97)
(rdbms.debug "Connecting in transaction ~A" transaction)
(oci-call (oci:env-create (environment-handle-pointer transaction)
(logior
(ecase (connection-encoding-of (database-of *transaction*))
(:ascii 0)
(:utf-16 oci:+utf-16+))
*default-oci-flags*)
null null null null 0 null))
...
** hu.dwim.rdbms/source/oracle/database.lisp
... (starts at line 9)
(def (class* e) oracle (database)
((connection-encoding
:utf-16
:type (member :ascii :utf-16))))
...
*** 1. All my settings are set to utf-8 except for the network encoding of hu.dwim.rdbms
chris@catch22:~$ locale
LANG=de_DE.UTF-8
LC_CTYPE=de_DE.UTF-8
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
* sb-impl::*default-external-format*
:UTF-8
* (get-encodings)
21:54 0 RDBMS DEBUG About to BEGIN transaction in database #<ORACLE {1004C49001}>
21:54 0 RDBMS DEBUG About to COMMIT transaction #<#<STANDARD-CLASS NIL {1004C970B1}> :begin-executed-p #f {10039EB251}>
(("connection-encoding" . :UTF-16) ("database-encoding" . :UTF-8))
*
*** 2. Fooling around with the NLS_LANG environment variable and sqlplus
AMERICAN_AMERICA.AL32UTF8 doesn't work with sqlplus but AMERICAN_AMERICA.AL32UTF8 does
chris@catch22:~$ sqlplus-connect.sh
Error 19 initializing SQL*Plus
Invalid NLS character set for this OS environment
chris@catch22:~$ $NLS_LANG
bash: AMERICAN_AMERICA.AL16UTF16: Kommando nicht gefunden.
chris@catch22:~$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
chris@catch22:~$ sqlplus-connect.sh
SQL*Plus: Release 10.2.0.5.0 - Production on Tue Nov 2 20:24:10 2010
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL>
*** 3. Oracle Environment Variables - bashrc snippet
export ORACLE_HOME=~/usr/instantclient_10_2
export XE=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export ORACLE_SID=XE
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib:/usr/local/lib:~/usr/instantclient_10_2:$XE/lib
export PATH=~/bin:~/usr/instantclient_10_2:$XE/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/bin/X11:/usr/games
export ORACLE_USERID='chris/woirgend'
export ORACLE_DSN='dbi:Oracle:XE'
export TNS_ADMIN=~/usr/instantclient_10_2/network/admin
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
*** 4. SBCL console - What kind of characters are we dealing with?
* (select-symtag2)
20:58 0 RDBMS DEBUG About to BEGIN transaction in database #<ORACLE {1004C49001}>
20:58 0 RDBMS DEBUG Executing "SELECT SYMTAG_KEY FROM symtag"
STYLE-WARNING: Undefined alien: "OCIGetInstantClientPackageName"
STYLE-WARNING: Undefined alien: "OCIGetInstantClientPackageName"
20:58 0 RDBMS DEBUG Connecting in transaction #<#<STANDARD-CLASS NIL {1004C970B1}> :begin-executed-p #t {100370D6A1}>
20:58 0 RDBMS DEBUG Logging on in transaction #<#<STANDARD-CLASS NIL {1004C970B1}> :begin-executed-p #t {100370D6A1}>
20:58 0 RDBMS DEBUG Preparing command: "SELECT SYMTAG_KEY FROM symtag"
20:58 0 RDBMS DEBUG Fetching "??????????" from buffer at index 0
20:58 0 RDBMS DEBUG Fetched: "???"
20:58 0 RDBMS DEBUG Fetching "??????????" from buffer at index 0
20:58 0 RDBMS DEBUG Fetched: "??????"
20:58 0 RDBMS DEBUG Fetching "??????????" from buffer at index 0
20:58 0 RDBMS DEBUG Fetched: "?????"
20:58 0 RDBMS DEBUG About to COMMIT transaction #<#<STANDARD-CLASS NIL {1004C970B1}> :begin-executed-p #t {100370D6A1}>
20:58 0 RDBMS DEBUG Cleaning up Oracle transaction #<#<STANDARD-CLASS NIL {1004C970B1}> :begin-executed-p #t {100370D6A1}> to database #<ORACLE {1004C49001}>
20:58 0 RDBMS DEBUG Calling logoff in transaction #<#<STANDARD-CLASS NIL {1004C970B1}> :begin-executed-p #t {100370D6A1}>
20:58 0 RDBMS DEBUG Freeing environment handle of transaction #<#<STANDARD-CLASS NIL {1004C970B1}> :begin-executed-p #t {100370D6A1}>
#<(AND (VECTOR T 8) (NOT SIMPLE-ARRAY)) {100395D23F}>
* (length *)
3
* (setq a **)
; (SETQ SYMARENA-ORACLE::A **)
;
; caught WARNING:
; undefined variable: A
;
; compilation unit finished
; Undefined variable:
; A
; caught 1 WARNING condition
#<(AND (VECTOR T 8) (NOT SIMPLE-ARRAY)) {100395D23F}>
* (elt (elt a 0) 0)
"???"
* (setq b *)
; (SETQ SYMARENA-ORACLE::B *)
;
; caught WARNING:
; undefined variable: B
;
; compilation unit finished
; Undefined variable:
; B
; caught 1 WARNING condition
"???"
* b
"???"
* (elt b 0)
#\U6600
* #\U6600
#\U6600
* (elt b 1)
#\U6F00
*
** 3.1. emacs - scratch buffer - elisp
?U6FFO - doesn't work in the emacs scratch buffer so I copied the char from sbcl to the emacs scratch buffer after expressing it like this in sbcl #\U6FF0
and got the following:
(char-charset ??)
chinese-big5-2