Funguje to, protože obě následující podmínky jsou pravdivé:
- Znaková sada klienta se rovná znakové sadě vaší databáze.
- Znaková sada povoluje libovolné bajtové hodnoty
Vaše znaková sada databáze a znaková sada klienta jsou nastaveny na US7ASCII
. V takovém případě jsou všechna data zapisována/čtena jedno po druhém bez jakékoli konverze, tj. vámi zaslané bajty jsou přesně zapsány do databáze. Pravděpodobně jste nenastavili NLS_LANG
vůbec na straně vašeho klienta, ale Oracle to nastaví na AMERICAN_AMERICA.US7ASCII
.
US7ASCII
je 7bitové kódování. Předpokládám, že čistá ASCII aplikace (kterou by mohlo být docela obtížné najít) by prostě ignorovala 8. bit, který je uložen v 8bitové architektuře. Další znakové sady, např. AL32UTF8
nepovolit každou hodnotu bajtu. V tomto případě budou takové znaky nahrazeny zástupným symbolem, např. ¿
nebo ?
.
Poznámka:znakovou sadu klienta nastavíte na US7ASCII
což s největší pravděpodobností není správné. Nastavte jej správně na znakovou sadu, kterou používá vaše aplikace, poté °
bude nahrazen.
V případě, že používáte SQL*Plus, zkontrolujte kódovou stránku konzoly příkazem chcp
, resp. locale charmap
. Nastavte NLS_LANG
před spuštěním sqlplus.