Работи, защото и двете условия са верни:
- Клиентският набор от знаци е равен на набора от знаци на вашата база данни.
- Наборът от знаци позволява всякакви стойности на байтове
Наборът от символи на вашата база данни и наборът от знаци на вашия клиент са зададени на US7ASCII
. В такъв случай всички данни се записват/четат един по един без преобразуване, т.е. байтовете, които изпращате, се записват точно в базата данни. Вероятно не сте задали NLS_LANG
изобщо от страната на вашия клиент, но Oracle го задава по подразбиране на AMERICAN_AMERICA.US7ASCII
.
US7ASCII
е 7-битово кодиране. Предполагам, че чисто ASCII приложение (което може да бъде доста трудно за намиране) просто би игнорирало 8-ия бит, който се съхранява в 8-битова архитектура. Други набори от знаци, напр. AL32UTF8
не позволявайте стойност на всеки байт. В този случай такива знаци ще бъдат заменени от контейнер, напр. ¿
или ?
.
Забележете, вие задавате вашия клиентски набор от знаци на US7ASCII
което най-вероятно не е правилно. Задайте го правилно към набора от знаци, който се използва от вашето приложение, след това °
ще бъдат заменени.
В случай, че използвате SQL*Plus, проверете кодовата страница на конзолата с командата chcp
, респ. locale charmap
. Задайте своя NLS_LANG
съответно променлива на средата, преди да стартирате sqlplus.