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
!DSPAM:4cd084f748589401417091!