Het werkt omdat de volgende voorwaarden beide waar zijn:
- Client-tekenset is gelijk aan uw database-tekenset.
- De tekenset staat alle bytewaarden toe
Uw database-tekenset en uw client-tekenset zijn ingesteld op US7ASCII
. In dat geval worden alle gegevens één voor één geschreven/gelezen zonder enige conversie, d.w.z. de bytes die u verzendt, worden exact naar de database geschreven. Waarschijnlijk heb je NLS_LANG
niet ingesteld helemaal niet aan uw clientzijde, maar Oracle stelt het standaard in op AMERICAN_AMERICA.US7ASCII
.
US7ASCII
is een 7-bits codering. Ik neem aan dat een pure ASCII-toepassing (die vrij moeilijk te vinden zou kunnen zijn) gewoon de 8e bit negeert die is opgeslagen in een 8-bits architectuur. Andere tekensets, b.v. AL32UTF8
niet elke bytewaarde toestaan. In dit geval zullen dergelijke tekens worden vervangen door een tijdelijke aanduiding, b.v. ¿
of ?
.
Let op, u stelt uw client-tekenset in op US7ASCII
wat hoogstwaarschijnlijk niet klopt. Stel het correct in op de tekenset die wordt gebruikt door uw toepassing, dan °
wordt vervangen.
Als u SQL*Plus gebruikt, controleer dan de consolecodepagina met het commando chcp
, resp. locale charmap
. Stel uw NLS_LANG
in omgevingsvariabele dienovereenkomstig voordat u sqlplus start.