Działa, ponieważ oba warunki są spełnione:
- Zestaw znaków klienta jest równy zestawowi znaków bazy danych.
- Zestaw znaków pozwala na dowolne wartości bajtowe
Twój zestaw znaków bazy danych i zestaw znaków klienta są ustawione na US7ASCII
. W takim przypadku każda z danych jest zapisywana/odczytywana jedna po drugiej bez jakiejkolwiek konwersji, tzn. wysyłane bajty są dokładnie zapisywane w bazie danych. Prawdopodobnie nie ustawiłeś NLS_LANG
w ogóle po stronie klienta, ale Oracle domyślnie wybiera AMERICAN_AMERICA.US7ASCII
.
US7ASCII
to kodowanie 7-bitowe. Zakładam, że czysta aplikacja ASCII (która może być dość trudna do znalezienia) po prostu zignorowałaby ósmy bit, który jest przechowywany w architekturze 8-bitowej. Inne zestawy znaków, m.in. AL32UTF8
nie zezwalaj na każdą wartość bajtową. W takim przypadku takie znaki zostaną zastąpione przez symbol zastępczy, np. ¿
czy ?
.
Pamiętaj, że ustawiłeś zestaw znaków klienta na US7ASCII
co najprawdopodobniej nie jest poprawne. Ustaw go poprawnie na zestaw znaków używany przez twoją aplikację, a następnie °
zostanie zastąpiony.
W przypadku korzystania z SQL*Plus sprawdź stronę kodową konsoli poleceniem chcp
ewent. locale charmap
. Ustaw swój NLS_LANG
odpowiednio zmienna środowiskowa przed uruchomieniem sqlplus.