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

Como salvar dados unicode no oracle?


Posso ver cinco áreas potenciais para problemas:

  1. Como você está realmente colocando o texto em seu aplicativo .NET? Se estiver codificado em um literal de string, você tem certeza de que o compilador está assumindo a codificação correta para seu arquivo de origem?

  2. Pode haver um problema em como você está enviando para o banco de dados.

  3. Pode haver um problema com a forma como ele está sendo armazenado no banco de dados.

  4. Pode haver um problema com a forma como você está buscando no banco de dados.

  5. Pode haver um problema com a forma como você está exibindo-o novamente depois.

Agora as áreas 2-4 parecem ser menos prováveis ​​de serem um problema do que 1 e 5. Como você está exibindo o texto depois? Você está realmente buscando-o no banco de dados em .NET ou está usando o Toad ou algo semelhante para tentar vê-lo?

Se você estiver escrevendo novamente a partir do .NET, sugiro que ignore o banco de dados completamente - se você apenas exibir a string em si, o que você verá?

Eu tenho um artigo que você pode achar útil na depuração de problemas de Unicode. Em particular, concentre-se em todos os lugares onde a codificação poderia estar dando errado, e certifique-se de que sempre que você "exibir" uma string, você despeja os caracteres Unicode exatos (como números inteiros) para que você possa verificar isso em vez de apenas o que sua fonte atual deseja exibir.

EDIT:Ok, então o banco de dados é envolvido em algum lugar no problema.

Eu fortemente sugiro que você remova qualquer coisa como ASP e HTML da equação. Escreva um aplicativo de console simples que não faz nada mas insira a string e busque-a novamente. Faça com que ele despeje os caracteres Unicode individuais (como números inteiros) antes e depois. Em seguida, tente ver o que está no banco de dados (por exemplo, usando o Toad). Eu não conheço as funções do Oracle para converter strings em sequências de caracteres Unicode individuais e depois converter esses caracteres em inteiros, mas essa seria a próxima coisa que eu tentaria.

EDIT:Mais duas sugestões (bom ver o aplicativo do console, btw).

  1. Especifique o tipo de dados para o parâmetro, em vez de apenas fornecer um objeto. Por exemplo:
    command.Parameters.Add (":UnicodeString",
                            OracleType.NVarChar).Value = stringToSave;
    

  2. Considere usar o próprio driver da Oracle em vez daquele embutido no .NET. Você pode querer fazer isso de qualquer maneira, pois geralmente é considerado mais rápido e confiável, acredito.