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

Se abbiamo il set di caratteri US7ASCII, perché ci consente di memorizzare caratteri non ascii?

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.