Det fungerar eftersom följande villkor båda är sanna:
- Kundens teckenuppsättning är lika med din databasteckenuppsättning.
- Teckenuppsättningen tillåter alla bytevärden
Din databasteckenuppsättning och din klientteckenuppsättning är inställda på US7ASCII
. I sådana fall skrivs/läses varje data en efter en utan någon konvertering, dvs de bytes du skickar skrivs exakt till databasen. Du har förmodligen inte angett NLS_LANG
överhuvudtaget på din klientsida men Oracle använder det som standard till AMERICAN_AMERICA.US7ASCII
.
US7ASCII
är en 7-bitars kodning. Jag antar att en ren ASCII-applikation (som kan vara ganska svår att hitta) bara skulle ignorera den 8:e biten som är lagrad i en 8-bitars arkitektur. Andra teckenuppsättningar, t.ex. AL32UTF8
tillåt inte varje bytevärde. I det här fallet kommer sådana tecken att ersättas av en platshållare, t.ex. ¿
eller ?
.
Observera att du ställer in din klientteckenuppsättning till US7ASCII
vilket med största sannolikhet inte är korrekt. Ställ in den korrekt till den teckenuppsättning som används av ditt program, sedan °
kommer att ersättas.
Om du använder SQL*Plus, kontrollera konsolens teckentabell med kommandot chcp
, resp. locale charmap
. Ställ in din NLS_LANG
miljövariabeln innan du startar sqlplus.