UTF 8 de tabelas Oracle

votos
3

O cliente pediu um número de mesas a ser extraído em CSV de, tudo feito nenhum problema. Eles apenas pediu que verifique se os arquivos estão sempre no formato UTF-8.

Como posso verificar isso é realmente o caso. Ou melhor ainda forçá-lo a ser assim, é algo que eu posso definir em um procedimento antes de executar uma consulta, talvez?

Os dados são extraídos a partir de uma base de dados Oracle 10g.

O que devo estar verificando?

obrigado

Publicado 10/12/2008 em 10:47
fonte usuário
Em outras línguas...                            


4 respostas

votos
5

Você pode verificar o caráter de banco de dados definido com a seguinte consulta:

select value from nls_database_parameters 
where parameter='NLS_CHARACTERSET'

Se ele diz que AL32UTF8 então seu banco de dados está no formato que você precisa e se a exportação não prejudica-lo, então você está feito.

Você pode ler sobre o suporte a globalização do Oracle aqui e aqui sobre os parâmetros NLS como o acima.

Respondeu 10/12/2008 em 11:03
fonte usuário

votos
1

Como, exatamente, você está gerando os arquivos CSV? Dependendo da arquitetura exata, haverá respostas diferentes.

Se estiver, por exemplo, usando SQL * Plus para extrair os dados, você precisará definir o NLS_LANGna máquina do cliente para algo apropriado (ie AMERICAN_AMERICA.AL32UTF8) para forçar os dados a serem enviados para a máquina cliente em UTF-8 . Se você estiver usando outras abordagens, NLS_LANGpode ou não ser importante.

Respondeu 10/12/2008 em 15:22
fonte usuário

votos
0

Ok, não era tão simples como eu esperava em primeiro lugar. A consulta acima retorna AL32UTF8.

Eu estou usando um proc armazenado compilado no banco de dados para percorrer uma lista de nomes de tabela, realizada em uma matriz dentro do procedimento armazenado.

Eu uso pacote DBMS_SQL para construir o SQL e UTL_FILE.PUT_NCHAR para inserir dados em um arquivo de texto.

Eu acreditava então a minha saída resultante seria em UTF 8 no entanto abertura na Textpad diz que é em ANSI e os dados são truncados em lugares :)

Felicidades

Pode ser importante que NLS_CHARACTERSET é AL32UTF8 e NLS_NCHAR_CHARACTERSET é AL16UTF16

Respondeu 10/12/2008 em 17:42
fonte usuário

votos
0

O que você tem que procurar é os caracteres ASCII de oito bits em entrada hte (se houver) são traduzidos em duplo byte utf-8 caracteres.

Isso é altamente dependente da sua página de código ASCII local, mas normalmente: - ASCII "£" deve ser x'A3' em ascii torna-se magicamente x'C2A3' em utf-8.

Respondeu 10/12/2008 em 11:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more