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.