Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle configurou o NLS_LANG padrão


Isto é o que provavelmente acontece:
  • O conjunto de caracteres do seu cliente deve ser algo como CP1252 ou ISO-8859-15, enquanto na verdade seu cliente realmente usa UTF8.
  • Neste conjunto de caracteres (UTF8), o símbolo á leva dois bytes, então seu cliente envia esses dois bytes, enquanto diz ao Oracle para tratá-los como CP1252. No CP1252 os dois bytes codificam para dois caracteres que resultam no DB interpretando a entrada como dois caracteres, portanto length('à') igual a 2 (e se você inserir esta string o resultado da inserção não será igual a à )
  • Quando você define corretamente o conjunto de caracteres, a entrada é tratada corretamente pelo oracle como um único caractere e seu comprimento é 1 (ainda dois bytes).

Conclusão:defina o conjunto de caracteres do cliente corretamente ou você obterá erros de tradução (você não obterá caracteres ilegais dessa maneira, mas poderá obter símbolos estranhos (¿ ).

O conjunto de caracteres do banco de dados é definido no momento da criação e geralmente é alterado por meio de exportação/criação de banco de dados/importação em branco.