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

ao inserir o caractere persa no Oracle db, vejo o ponto de interrogação


Quando você diz que roda no servidor, quer dizer através do SQL*Plus?

A primeira coisa a verificar é qual caractere real está sendo armazenado - use a função DUMP para verificar isso:

Função de despejo do Oracle

Isso lhe dirá o que está realmente armazenado. Se a cadeia entre seu aplicativo cliente e o servidor Oracle não for apropriada, você poderá obter a conversão do conjunto de caracteres.

Assumindo que o caractere correto está sendo salvo, o que você vê no servidor / sqlplus é a conversão de caracteres em exibição. Ou seja O Oracle está "servindo" o caractere corretamente, mas a tela não está lidando com ele como você espera. Para corrigir isso, você precisa definir a variável de ambiente NLS_LANG para o conjunto de caracteres correto.

por exemplo, em um projeto recente o padrão:
set NLS_LANG=AMERICAN_AMERICA.US7ASCII

em seguida, consulte alguns dados fornecidos:
NAME
-----------------------------------
MS ELLIE MARTALL

Mas:
set NLS_LANG=AMERICAN_AMERICA.US8PC437

Em seguida, executando a consulta deu:
NAME
-----------------------------------
MS ÉLLIE MARTALL

E também:
set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15

deu:
NAME
-----------------------------------
MS ╔LLIE MARTALL

A principal coisa aqui é que os dados reais são os mesmos, é a maneira como os dados estão sendo apresentados em sua tela é o que difere, e esse comportamento pode ser controlado por NLS_LANG.