Funziona perché le seguenti condizioni sono vere entrambe:
- Il set di caratteri del client è uguale al set di caratteri del database.
- Il set di caratteri consente qualsiasi valore di byte
Il set di caratteri del database e il set di caratteri del client sono impostati su US7ASCII
. In tal caso ogni dato viene scritto/letto uno per uno senza alcuna conversione, ovvero i byte inviati vengono scritti esattamente nel database. Probabilmente non hai impostato NLS_LANG
dal lato client, ma Oracle lo imposta per impostazione predefinita su AMERICAN_AMERICA.US7ASCII
.
US7ASCII
è una codifica a 7 bit. Presumo che un'applicazione ASCII pura (che potrebbe essere abbastanza difficile da trovare) ignorerebbe semplicemente l'ottavo bit che è memorizzato in un'architettura a 8 bit. Altri set di caratteri, ad es. AL32UTF8
non consentire ogni valore di byte. In questo caso tali caratteri verranno sostituiti da un segnaposto, ad es. ¿
o ?
.
Nota, hai impostato il set di caratteri client su US7ASCII
che molto probabilmente non è corretto. Impostalo correttamente sul set di caratteri utilizzato dalla tua applicazione, quindi °
verrà sostituito.
Nel caso utilizzi SQL*Plus, controlla la codepage della console con il comando chcp
, risp. locale charmap
. Imposta il tuo NLS_LANG
variabile di ambiente di conseguenza prima di avviare sqlplus.