Oracle
 sql >> Database >  >> RDS >> Oracle

quando inserisco il carattere persiano in Oracle db vedo il punto interrogativo

Quando dici che corri sul server, intendi tramite SQL*Plus?

La prima cosa da controllare è quale carattere effettivo viene memorizzato:usa la funzione DUMP per verificare questo:

Funzione di dump Oracle

Questo ti dirà cosa è effettivamente memorizzato. Se la catena tra l'app client e il server Oracle non è appropriata, è possibile che si verifichi la conversione del set di caratteri.

Supponendo che venga salvato il carattere corretto, ciò che viene visualizzato sul server/sqlplus è la conversione dei caratteri visualizzata. Cioè. Oracle sta "servendo" il personaggio correttamente, ma il display non lo gestisce come previsto. Per risolvere questo problema, devi impostare la variabile di ambiente NLS_LANG sul set di caratteri corretto.

ad esempio, in un progetto recente l'impostazione predefinita:

set NLS_LANG=AMERICAN_AMERICA.US7ASCII

quindi interroga alcuni dati forniti:

NAME
-----------------------------------
MS ELLIE MARTALL

Ma:

set NLS_LANG=AMERICAN_AMERICA.US8PC437

Quindi l'esecuzione della query ha fornito:

NAME
-----------------------------------
MS ÉLLIE MARTALL

E inoltre:

set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15

ha dato:

NAME
-----------------------------------
MS ╔LLIE MARTALL

La cosa fondamentale qui è che i dati effettivi sono gli stessi, è il modo in cui i dati vengono presentati sul display è ciò che differisce e quel comportamento può essere controllato da NLS_LANG.