Det virker, fordi følgende betingelser begge er sande:
- Klienttegnsæt er lig med dit databasetegnsæt.
- Tegnsættet tillader enhver byteværdi
Dit databasetegnsæt og dit klienttegnsæt er indstillet til US7ASCII . I så fald skrives/læses hver data én efter én uden nogen konvertering, dvs. de bytes, du sender, skrives nøjagtigt til databasen. Du har sandsynligvis ikke indstillet NLS_LANG overhovedet på din klientside, men Oracle indstiller det som standard til AMERICAN_AMERICA.US7ASCII .
US7ASCII er en 7-bit-kodning. Jeg antager, at en ren ASCII-applikation (som kunne være ret svær at finde) bare vil ignorere den 8. bit, som er gemt i en 8-bit arkitektur. Andre tegnsæt, f.eks. AL32UTF8 tillad ikke hver byteværdi. I dette tilfælde vil sådanne tegn blive erstattet af en pladsholder, f.eks. ¿ eller ? .
Bemærk, du indstiller dit klienttegnsæt til US7ASCII hvilket højst sandsynligt ikke er korrekt. Indstil det korrekt til det tegnsæt, der bruges af din applikation, og derefter ° vil blive erstattet.
Hvis du bruger SQL*Plus, skal du kontrollere konsollens tegntabel med kommandoen chcp , hhv. locale charmap . Indstil din NLS_LANG miljøvariabel i overensstemmelse hermed, før du starter sqlplus.