Inghippi con il Character SET

venerdì 25 gennaio 2013 alle 25:19 | Pubblicato su Diario | 3 commenti
Tag:

Tanto tempo fa ho dedicato un paio di post alla gestione della “globalizzazione” in Oracle, i post sono questo  e questo. Ad oggi ogni tanto ancora incontro problemi nella gestione sul database di caratteri particolari quali le lettere accentate utilizzate con tastiere italiane, tipo la “à”. Oggi ho fatto un piccolo approfondimento, devo però prima fare una premessa. Come client Oracle io utilizzo prevalentemente SQL*Plus, sul mio PC ho installato l’instant client con SQL*Plus, riducendo così al minimo il software installato. L’instant client ha il vantaggi di essere “portabile”, come si dice oggi, basta copiare il pacchetto su un pc, settare le opportune variabili d’ambiente e tutto funziona. Occasionalmente utilizzo anche SQL Developer dove l’interfaccia grafica mi è utile.

Normalmente i database su cui lavoro hanno come charset principale AL32UTF8 il che significa che il database non ha certo problemi a registrare tutti i caratteri che si possono trovare su una tastiera italiana, anzi potrebbe memorizzare correttamente anche caratteri da altri alfabeti più esotici contemporaneamente, a questo serve l’UTF8.

Premesso ciò mi sembra che se si utilizza SQL Developer non ci siano grossi problemi, SQL Developer pare gestire  (almeno sulla mia installazione) le lettere accentate senza problemi; con SQL*Plus invece ci sono grossi problemi ogni qual volta si vuole gestire caratteri non ascii, quali ad esempio la “à”. Come avevo indicato nei due vecchi post succitati in teoria è possibile impostare sulle finestre dos di windows il charset UTF8 (con il comando CHCP 65001 e impostando i font “Lucida Console”), poi settando opportunamente la variabile NLS_LANG=.AL32UTF8 . In teoria, perché io in pratica non ci sono riuscito, sul mio pc con Windows 7 semplicemente non funziona e io le lettere accentate contenute in campi Varchar2 di un mio database non le vedo correttamente.


C:\tmp>set NLS_LANG=.AL32UTF8

C:\tmp>sqlplus sviluppo50/sviluppo50@svil112_methone

SQL*Plus: Release 11.2.0.3.0 Production on Fri Jan 25 10:05:25 2013

Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options
PL/SQL procedure successfully completed.
Session altered.

SVILUPPO50@svil112_methone > select * from test_charset;

A
---------------------------------------------------------------------------------------
��
��

 
SVILUPPO50@svil112_methone > SELECT * FROM NLS_DATABASE_PARAMETERS
 2 WHERE PARAMETER LIKE 'NLS_CHARACTERSET';

PARAMETER VALUE
------------------- -------------------
NLS_CHARACTERSET AL32UTF8

 

Mi è stato possibile collegandomi con putty a un server linux, settando su putty il charset utf-8 e settando la variabile NLS_LANG, ma non da sqlplus invocato da windows. Lasciando la situazione di default (quindi con codepage 850):


C:\tmp>chcp 850
Tabella codici attiva: 850

C:\tmp>set NLS_LANG=

C:\tmp>sqlplus sviluppo50/sviluppo50@svil112_methone

SQL*Plus: Release 11.2.0.3.0 Production on Fri Jan 25 10:11:20 2013

Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options
PL/SQL procedure successfully completed.
Session altered.

SVILUPPO50@svil112_methone > select * from test_charset;

A
--------------------------------------------------------------------------------
a
a

Alla fine l’unico compromesso che ho trovato per risolvere il mio problema è stato di adottare sul client il charset cp1252, quindi settando chcp 1252 e NLS_LANG=.WE8MSWIN1252 effettivamente riesco a leggere e inserire la ‘à’


C:\tmp>chcp 1252
Tabella codici attiva: 1252

C:\tmp>set NLS_LANG=.WE8MSWIN1252

C:\tmp>sqlplus sviluppo50/sviluppo50@svil112_methone

SQL*Plus: Release 11.2.0.3.0 Production on Fri Jan 25 10:13:19 2013

Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options
PL/SQL procedure successfully completed.
Session altered.

SVILUPPO50@svil112_methone > select * from test_charset;

A
--------------------------------------------------------------------------------
à
à

SVILUPPO50@svil112_methone > update test_charset set a='è';

2 rows updated.

SVILUPPO50@svil112_methone > select * from test_charset;

A
--------------------------------------------------------------------------------
è
è

Non voglio tediare ulteriormente, ma usando chcp 65001 e NLS_LANG=AL32UTF8 cercado di fare update con lettere accentate sqlplus si sloggga, provare per credere.

About these ads

3 commenti »

RSS feed dei commenti a questo articolo. TrackBack URI

  1. Ciao Cristian,
    sembrerebbe che ciò sia dovuto dal mancato utilizzo di sqlplus delle giuste API WIN32;
    a suo tempo mi ero posto il problema anche io e questo è quello che trovai (il post è della fine del 2007) :

    https://forums.oracle.com/forums/thread.jspa?messageID=2253842

    Ciao
    Alessandro

    • Ciao Alessandro,
      in effetti avevo visto anche io quella discussione e tutto sommato ne esce che non è tanto colpa del sistema operativo da me poco amato quanto dall’implementazione di sqlplus, cosa che un po’ mi infastidisce :)

  2. […] speranza è comunque di chiudere l’argomento ripreso non molto tempo fa con il post “Inghippi con il Charcter SET“.  L’inspirazione mi è venuta leggendo la nota del supporto […]


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com. | The Pool Theme.
Entries e commenti feeds.

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 71 follower

%d blogger cliccano Mi Piace per questo: