Funciona porque as seguintes condições são verdadeiras:
- O conjunto de caracteres do cliente é igual ao conjunto de caracteres do banco de dados.
- O conjunto de caracteres permite qualquer valor de byte
Seu conjunto de caracteres de banco de dados e seu conjunto de caracteres de cliente são definidos como
US7ASCII
. Nesse caso, cada dado é escrito/lido um a um sem nenhuma conversão, ou seja, os bytes que você envia são escritos exatamente no banco de dados. Provavelmente você não definiu NLS_LANG
em tudo no seu lado do cliente, mas o padrão da Oracle é AMERICAN_AMERICA.US7ASCII
. US7ASCII
é uma codificação de 7 bits. Suponho que um aplicativo ASCII puro (que pode ser bastante difícil de encontrar) simplesmente ignoraria o 8º bit que é armazenado em uma arquitetura de 8 bits. Outros conjuntos de caracteres, por ex. AL32UTF8
não permita cada valor de byte. Nesse caso, esses caracteres serão substituídos por um espaço reservado, por exemplo. ¿
ou ?
. Observe que você define o conjunto de caracteres do cliente como
US7ASCII
o que provavelmente não está correto. Defina-o corretamente para o conjunto de caracteres usado pelo seu aplicativo e, em seguida, °
será substituído. Caso você use o SQL*Plus, verifique a página de código do console com o comando
chcp
, resp. locale charmap
. Defina seu NLS_LANG
variável de ambiente de acordo antes de iniciar o sqlplus.