Um código de idioma é um conjunto de informações que abordam requisitos linguísticos e culturais que correspondem a um determinado idioma e país. Tradicionalmente, os dados associados a um código de idioma fornecem suporte para formatação e análise de datas, horas, números, moedas etc. O fornecimento de dados de código de idioma atuais e corretos historicamente é de responsabilidade de cada proprietário ou fornecedor da plataforma, levando a inconsistências e erros nos dados de localidade.
Definir o parâmetro do ambiente NLS_LANG é a maneira mais simples de especificar o comportamento da localidade para o software Oracle. Ele define o idioma e o território usados pelo aplicativo cliente e pelo servidor de banco de dados. Também indica o conjunto de caracteres do cliente, que corresponde ao conjunto de caracteres dos dados a serem inseridos ou exibidos por um programa cliente.
NLS_LANG é definido como uma variável de ambiente local nas plataformas UNIX. NLS_LANG é definido no registro nas plataformas Windows.
O parâmetro NLS_LANG possui três componentes: idioma, território e conjuntos de caracteres. Especifique no seguinte formato, incluindo a pontuação:
NLS_LANG = language_territory.charset
Cada componente do parâmetro NLS_LANG controla a operação de um subconjunto de recursos de suporte à globalização:
Idioma
Especifica convenções como o idioma usado para mensagens da Oracle, classificação, nomes de dias e nomes de meses. Cada idioma suportado possui um nome exclusivo; por exemplo, AMERICANO, FRANCÊS ou ALEMÃO. O argumento idioma especifica valores padrão para o território e os argumentos do conjunto de caracteres. Se o idioma não for especificado, o valor padrão será AMERICANO
Território
especifica convenções como a data padrão, os formatos monetário e numérico. Cada território suportado possui um nome exclusivo, como, por exemplo, AMÉRICA, FRANÇA ou CANADÁ. Se o território não for especificado, o valor será derivado do valor do idioma.
Conjunto de caracteres
especifica o conjunto de caracteres usado pela aplicação cliente (normalmente o conjunto de caracteres Oracle que corresponde ao conjunto de caracteres do terminal do usuário ou o conjunto de caracteres do SO). Cada conjunto de caracteres suportado possui um acrônimo exclusivo, por exemplo, US7ASCII, WE8ISO8859P1, WE8DEC, WE8MSWIN1252 ou JA16EUC. Cada idioma tem um conjunto de caracteres padrão associado a ele.
Observação:
Todos os componentes da definição NLS_LANG
são opcionais; qualquer item que não esteja especificado utiliza o valor padrão. Se você especificar território ou conjunto de caracteres, deverá incluir o delimitador [sublinhado (_) para demarcar o território, ponto final (.) para demarcar o conjunto de caracteres]. Caso contrário, o vaor é processado como a identificação de um idioma.
Por exemplo, para configurar somente o território do NLS_LANG
, você pode usar o seguinte formato: NLS_LANG=_JAPAN
O restante deste documento se concentrará no componente charset da configuração NLS_LANG, pois é a peça menos compreendida e mais importante a ser definida corretamente.
Em muitos casos, o NLS_LANG já foi definido durante a instalação da Oracle ou posteriormente de forma manual. Para ter certeza de que você pode usar esses métodos para recuperar o valor de NLS_LANG para SQL*Plus:
Em UNIX:
SQL> HOST ECHO $NLS_LANG
Isso retorna o valor do parâmetro.
No Windows:
No Windows, você tem duas opções possíveis, normalmente o NLS_LANG é definido no registro, mas também pode ser definido no ambiente, mas isso geralmente não é feito. O valor no ambiente tem precedência sobre o valor no registro e é usado para ALL Oracle_Homes no servidor. Observe também que qualquer variável de ambiente USER (USUÁRIO) tem precedência sobre qualquer variável de ambiente SYSTEM (SISTEMA) (esse é o comportamento do Windows e não tem nada a ver com Oracle) se definido
Para verificar se está definido no ambiente:
SQL> HOST ECHO %NLS_LANG%
Caso isso reporte apenas % NLS_LANG%, a variável não estará configurada no ambiente.
Se estiver definido, será informado algo como
ENGLISH_UNITED KINGDOM.WE8ISO8859P1
Caso NLS_LANG não esteja definido no ambiente, verifique o valor inserido no registro:
SQL>@.[%NLS_LANG%].
Caso o resultado seja algo parecido com:
Não foi possível abrir arquivo.[ENGLISH_UNITED KINGDOM.WE8ISO8859P1].
O "nome do arquivo" entre chaves é o valor do parâmetro do registro.
Caso seja retornado a seguinte mensagem:
Impossível abrir o arquivo ".[% NLS_LANG%]." o parâmetro NLS_LANG também não está definido no registro.
Observe que a técnica @.[% NLS_LANG%]. relata o NLS_LANG conhecido pelo executável SQL*Plus, ela não lê o registro em si. Mas se você executar o comando HOST primeiro e o NLS_LANG não estiver definido no ambiente, pode ter certeza de que a variável estará definida no registro se o @.[% NLS_LANG%]. retornar um valor válido.
Todos os outros parâmetros NLS podem ser recuperados por:
SELECT * FROM NLS_SESSION_PARAMETERS;
Observação:
SELECT USERENV ('language') FROM DUAL; dá o <Language>_<territory> da sessão, mas o conjunto de caracteres DATABASE não é o cliente, portanto, o valor retornado não é o da configuração NLS_LANG completa do cliente!
Esta seção explica a ordem em que os parâmetros NLS são levados em consideração no modelo de cliente/servidor de banco de dados. (Isso NÃO cobre conexões JDBC Finas)
Existem 3 nívels para configurar os parâmetros do NLS: Banco de dados, Instância e Sessão. Se um parâmetro é definido em mais de um nível, as regras sobre as quais prevalece são bastante diretas:
SELECT * from NLS_SESSION_PARAMETERS;
Essas são as configurações usadas para a sessão SQL atual.
Elas refletem (nesta ordem):
Portanto, se você definir NLS_LANG=_BELGIUM. WE8MSWIN1252, você obtém o seguinte:
VALOR DO PARÂMETRO
NLS_LANGUAGE AMERICAN
NLS_TERRITORY BELGIUM
NLS_CURRENCY <euro sign here>
NLS_ISO_CURRENCY BELGIUM
Observação:
A diferença entre NLS_LANG=_BELGIUM.WE8MSWIN1252 (correto) e
NLS_LANG=BELGIUM.WE8MSWIN1252 (incorreto), é que você precisa configurar "_" como separador.
Portanto, se você definir NLS_LANG=ITALIAN_.WE8MSWIN1252, obterá o seguinte:
VALOR DO PARÂMETRO
NLS_LANGUAGE ITALIAN
NLS_TERRITORY ITALY
NLS_CURRENCY <euro sign here>
NLS_ISO_CURRENCY ITALY
Observação:
Observe a diferença entre NLS_LANG=ITALIAN_.WE8MSWIN1252 (correto) e
NLS_LANG=ITALIAN.WE8MSWIN1252 (incorreto), você precisa configurar "_" como separador.
Portanto, se você definir NLS_LANG=.WE8MSWIN1252, obterá o seguinte:
VALOR DO PARÂMETRONLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
Note:
The difference between NLS_LANG=.WE8MSWIN1252 (correct) and
NLS_LANG=WE8MSWIN1252 (incorrect), you need to set the "." as separator.
NLS_SORT, NLS_DATE_FORMAT etc. podem ser configurados como "uma configuração separada" e substituirão os padrões derivados de NLS_LANG _ part.
Portanto, se você definir NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252 e NLS_ISO_CURRENCY=FRANCE, obterá o seguinte:
VALOR DO PARÂMETRO
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY FRANCE
Padrões:
* Se NLS_DATE_LANGUAGE ou NLS_SORT não estiver definido, será derivado da
NLS_LANGUAGE.
* Se NLS_CURRENCY, NLS_DUAL_CURRENCY, NLS_ISO_CURRENCY, NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT, NLS_TIMESTAMP_TZ_FORMAT, NLS_NUMERIC_CHARACTERS não estão definidos, eles estão definidos a partir do NLS_TERRITORY
<Language>_<Territory>.US7ASCII e os valores para
<Language>_<Territory> serão aqueles encontrados em
NLS_INSTANCE_PARAMETERS. Parâmetros como NLS_SORT definidos como "separados" no lado do cliente são ignorados.
Note:
* If set, client parameters (NLS_SESSION_PARAMETERS) always take precedence over NLS_INSTANCE_PARAMETERS and NLS_DATABASE_PARAMETERS.
* This behavior cannot be disabled on/from the server, so a parameter set on the client always has precedence above an instance or database parameter.
* NLS_LANG cannot be changed by ALTER SESSION, NLS_LANGUAGE and NLS_TERRITORY can. However NLS_LANGUAGE and /or NLS_TERRITORY cannot be set as "standalone" parameters in the environment or registry on the client.
* NLS_SESSION_PARAMETERS is NOT visible for other sessions. If you need to trace this then you have to use a logon trigger to create your own logging table (based on session parameters)
* The <clients characterset> part of NLS_LANG is NOT shown in any system table or view.
* On Windows you have two possible options, normally the NLS_LANG is set in the registry, but it can also be set in the environment, however this is not often done and generally not recommended to do so. The value in the environment takes precedence over the value in the registry and is used for ALL Oracle_Homes on the server if defined as a system environment variable.
* NLS_LANGUAGE in the session parameters also declares the language for the client error messages.
* You cannot "set" a NLS parameter in an SQL script; you need to use ALTER SESSION.
SELECT * from NLS_INSTANCE_PARAMETERS;
Essas são as configurações no init.ora do banco de dados no momento em que o banco de dados foi iniciado ou definido por ALTER SYSTEM.
Se o parâmetro não estiver explicitamente definido no init.ora ou definido pelo ALTER SYSTEM, seu valor NÃO será derivado de um parâmetro "superior" (estamos falando de parâmetros como NLS_SORT que derivam um padrão de NLS_LANGUAGE em NLS_SESSION_PARAMETERS, esse NÃO é o caso de NLS_INSTANCE_PARAMETERS)
Note:
* NLS_LANG is not an init.ora parameter; NLS_LANGUAGE and NLS_TERRITORY are so you need to set NLS_LANGUAGE and NLS_TERRITORY separately.
* You cannot define the or NLS_LANG in the init.ora
The client characterset is defined by the NLS_LANG on the client OS (see above).
* You cannot define the database characterset in the init.ora. The database characterset is defined by the "Create Database" command.
* These settings take precedence above the NLS_DATABASE_PARAMETERS.
* These values are used for the NLS_SESSION_PARAMETERS if the client the
NLS_LANG is NOT set.
* Oracle strongly recommends that you set the NLS_LANG on the client at least to
NLS_LANG=.<clients characterset>
* The NLS_LANGUAGE in the instance parameters also declares the language for the server error messages in alert.log and in trace files.
SELECT * from NLS_DATABASE_PARAMETERS;
O padrão é AMERICAN_AMERICA se não houver parâmetros definidos explicitamente no init.ora durante o tempo de criação do banco de dados. Se houver parâmetros configurados no init.ora durante a criação do banco de dados, você os verá aqui. Não há como alterá-los após a criação do banco de dados. NÃO tente atualizar as tabelas do sistema para ignorar essas configurações! Essas configurações são usadas para fornecer ao banco de dados um padrão se os parâmetros INSTANCE e SESSION não estiverem definidos.
Observação:
* NLS_LANG não é um parâmetro init.ora, NLS_LANGUAGE e NLS_TERRITORY são.
Portanto, você precisa definir NLS_LANGUAGE e NLS_TERRITORY separadamente.
* Esses parâmetros são substituídos por NLS_INSTANCE_PARAMETERS e NLS_SESSION_PARAMETERS.
* Você não consegue definir o conjunto de <clients > ou NLS_LANG no init.ora. O conjunto de caracteres do cliente é definido pelo NLS_LANG no SO do cliente.
* Você não pode definir o conjunto de caracteres do banco de dados no init.ora.
O conjunto de caracteres (nacional) do banco de dados NLS_(NCHAR)_CHARACTERSET) é definido pelo comando "Create Database".
* Os parâmetros NLS_CHARACTERSET e NLS_NCHAR_CHARACTERSET não podem ser substituídos pelos parâmetros de instância ou sessão.
Eles são definidos pelo valor especificado no comando "CREATE DATABASE" e não devem ser alterados posteriormente de forma dinâmica. NÃO atualize as tabelas do sistema para alterar o conjunto de caracteres. Isso pode corromper seu banco de dados e potencialmente tornar impossível abrir o banco de dados novamente.
* A configuração do NLS_LANG durante a criação do banco de dados não influencia o NLS_DATABASE_PARAMETERS.
* O NLS_LANG definido durante a criação do banco de dados NÃO tem impacto no Conjunto de caracteres Nacionais do banco de dados.
Comandos SELECT adicionais:
A) SELECT name,value$ from sys.props$ onde nome como '%NLS%';
Isso fornece as mesmas informações de NLS_DATABASE_PARAMETERS.
Você deve usar NLS_DATABASE_PARAMETERS em vez de props$.
Observe o UPPERCASE '% NLS%'
B) SELECT * from v$nls_parameters;
Essa consulta retorna os parâmetros da sessão atual e o conjunto de caracteres *DATABASE*, conforme retornados pelo comando NLS_DATABASE_PARAMETERS.
C) SELECT name,value from v$parameter where name like '%NLS%';
Essa consulta retorna as mesmas informações de NLS_INSTANCE_PARAMETERS.
Observe o LOWERCASE '% NLS%'
D) SELECT userenv ('language') from dual;
and
SELECT sys_context('userenv','language') from dual;
Esses dois comandos SELECT dão o _ da sessão e o
conjunto de caracteres DATABASE. O conjunto de caracteres do banco de dados não é igual ao conjunto de caracteres do NLS_LANG com o qual você iniciou esta conexão! Não se deixe enganar, embora a saída desta consulta pareça o valor de uma variável NLS_LANG, ela NÃO é.
E) SELECT userenv ('lang') from dual;
Esse comando SELECT oferece o código reduzido que a Oracle usa para o Idioma definido na configuração NLS_LANGUAGE durante a sessão atual. Se NLS_LANGUAGE estiver configurado em Francês, o resultado será "F", se NLS_LANGUAGE estiver configurado em Inglês, o resultado será "GB"
se NLS_LANGUAGE estiver configurado em Inglês Norte-Americano, o resultado será "US", e assim por diante...
F) SHOW parameter NLS%
Retornará o mesmo de NLS_INSTANCE_PARAMETERS
Um banco de dados é criado em um sistema UNIX com o conjunto de caracteres US7ASCII. Um cliente Windows conectado ao banco de dados trabalha com o conjunto de caracteres WE8MSWIN1252 (configurações regionais -> Europa Ocidental /ACP 1252) e o DBA, use o UNIX shell (ROMAN8) para trabalhar no banco de dados. O NLS_LANG está definido como american_america.US7ASCII nos clientes e no servidor.
Note:
This is an INCORRECT setup to explain character set conversion, don't use it in your environment!
Um ponto muito importante (como mencionado anteriormente):
Quando o conjunto de caracteres NLS_LANG do cliente é definido com o mesmo valor que o conjunto de caracteres do banco de dados, a Oracle presume que os dados enviados ou recebidos são da mesma codificação (correta), portanto, nenhuma conversão ou validação pode ocorrer por motivos de desempenho. Os dados são armazenados da forma como são entregues pelo cliente, pouco a pouco.
From Windows insert an ‘é’ (LATIN SMALL LETTER E WITH ACUTE) into a table NLS_TEST containing one column ‘TEST’ of the type 'char'.
Desde que você insira e selecione na coluna do Windows o conjunto de caracteres WE8MSWIN1252, tudo funcionará sem problemas. Nenhuma conversão é feita e 8 bits são inseridos e lidos novamente, mesmo que o conjunto de caracteres do banco de dados seja definido como 7 bits. Isso acontece porque um byte tem 8 bits e a Oracle está SEMPRE usando 8 bits, mesmo com um conjunto de caracteres de 7 bits. Em uma configuração correta, o Bit mais significativo não é usado e apenas 7 bits são levados em consideração.
Por um motivo ou outro, você precisa inserir no servidor UNIX. Quando você aplica SELECT from tables where data is inserted by the Windows clients você recebe ‘Ò’ (O LATINO MAIÚSCULO COM ACENTO AGUDO) em vez de ‘é’.
Se você inserir ‘é’ no servidor UNIX e aplicar SELECT na linha do cliente Windows, você receberá ‘Å’ (A LATINO MAIÚSCULA COM ANEL EM CIMA) back.
O ponto principal é que você tem dados INCORRETOS no banco de dados. Você armazena o valor numérico para 'é' do conjunto de caracteres WE8MSWIN1252 no banco de dados, mas informa à Oracle que são dados US7ASCII, então a Oracle NÃO está convertendo nada e apenas armazena o valor numérico (novamente: a Oracle acredita que o cliente está fornecendo códigos US7ASCII porque NLS_LANG está definido como US7ASCII, e o conjunto de caracteres do banco de dados também é US7ASCII -> nenhuma conversão será feita).
Quando você SELECIONA a mesma coluna novamente no servidor UNIX, a Oracle espera novamente que o valor esteja correto e transmita o valor ao terminal UNIX sem nenhuma conversão.
Agora, o problema é que, no conjunto de caracteres WE8MSWIN1252, o tem o valor hexadecimal 'E9', além do conjunto de caracteres Roman8, o valor hexadecimal para 'é' é 'C5'. A Oracle passa apenas o valor armazenado no banco de dados ('E9') para o terminal UNIX, e o terminal UNIX acha que esta é a letra ‘?’ porque em seu conjunto de caracteres (Roman8) o valor hexadecimal 'E9' está representando a letra ‘Ò’. Dessa forma, em vez de ‘é’ você verá ‘Ò’ na tela do terminal UNIX.
O inverso (a inserção no UNIX e o SELECT no cliente Windows) é a mesma história, mas você obtém outros resultados.
A solução é criar um banco de dados com um conjunto de caracteres que contenha ‘é’
(WE8MSWIN1252, WE8ISO89859P1, UTF-8 etc.) e configurando o NLS_LANG no cliente para WE8MSWIN1252 e no servidor para WE8ROMAN8. Se você inserir um 'é' nos dois lados, você receberá um 'é' de volta, independentemente de onde você aplicar SELECT. A Oracle sabe que um valor hexadecimal de 'C5 inserido pelo UNIX e um 'E9 de um cliente WE8MSWIN1252 são ambos e insere no banco de dados (o código no banco de dados depende do conjunto de caracteres que você escolheu).
Você não precisa alternar entre UNIX, Windows ou outros clientes do SO para encontrar esse tipo de problema. O mesmo problema aparece se você adicionar clientes Windows que estão usando outro conjunto de caracteres e tiver um conjunto NLS_LANG incorreto.
Para especificar o comportamento da localidade do software Oracle do cliente, você deve definir seu parâmetro NLS_LANG. Ele define o idioma, o território e também o conjunto de caracteres do seu cliente. Você precisa verificar as configurações do ambiente de localidade para definir seu terceiro campo NLS_LANG (conjunto de caracteres) de acordo com ele. Para fazer isso, use o comando "locale" desta forma:
$ locale
Example of output:
LANG=fr_FR
LC_CTYPE="fr_FR.iso885915@euro"
LC_COLLATE="fr_FR.iso885915@euro"
LC_MONETARY="fr_FR.iso885915@euro"
LC_NUMERIC="fr_FR.iso885915@euro"
LC_TIME="fr_FR.iso885915@euro"
LC_MESSAGES="fr_FR.iso885915@euro"
LC_ALL=fr_FR.iso885915@euro
A saída deste comando não é exatamente a mesma em todos os ambientes Unix. Em algumas plataformas, pode ser útil usar a seguinte sintaxe para obter mais detalhes sobre a página de código realmente usada:
$ locale LC_CTYPE | head
Example of output
in a HP-UX environment
:
""
""
"iso885915"
""
Example of output in a Linux environment:
upper;lower;alpha;digit;xdigit;space;print;graph;blank;cntrl;
punct;alnum;
combining;combining_level3
toupper;tolower;totitle
16
1
ISO-8859-15
70
84
1
0
Nesses casos, o terceiro campo NLS_LANG deve ser definido como WE8ISO8859P15. No Solaris, AIX, TRU64, essa sintaxe não fornece informações complementares interessantes. Para encontrar mais detalhes sobre essas configurações:
No Solaris, procure em /usr/lib/locale
No AIX, procure em /usr/lib/nls/README
No TRU64, procure em /usr/lib/nls
No HP-UX, procure em /usr/lib/nls/config
No Linux, procure em /usr/share/locale/locale.alias
Para definir um valor escolhido para essas configurações "locale", é necessário saber quais valores estão disponíveis. Para saber isso, use a seguinte sintaxe:
$ locale -a
Então, quando você escolher um valor, por exemplo, UTF-8 no Linux, poderá configurá-lo da seguinte maneira:
$ export LC_ALL=UTF-8
ou
% setenv LC_ALL UTF-8
Example of output after the setenv:
$ locale
LANG=fr_FR
LC_CTYPE="UTF-8"
LC_NUMERIC="UTF-8"
LC_TIME="UTF-8"
LC_COLLATE="UTF-8"
LC_MONETARY="UTF-8"
LC_MESSAGES="UTF-8"
LC_PAPER="UTF-8"
LC_NAME="UTF-8"
LC_ADDRESS="UTF-8"
LC_TELEPHONE="UTF-8"
LC_MEASUREMENT="UTF-8"
LC_IDENTIFICATION="UTF-8"
LC_ALL=UTF-8
$ locale LC_CTYPE | head
upper;lower;alpha;digit;xdigit;space;print;
graph;blank;cntrl;punct;alnum;combining;combining_level3
toupper;tolower;totitle
16
6
UTF-8
70
84
1
0
1
Nesse caso, o terceiro campo (conjunto de caracteres) de NLS_LANG deve ser definido como UTF8.
% setenv NLS_LANG American_America.UTF8
Nos sistemas Windows, o esquema de codificação (conjunto de caracteres) é especificado por uma página de código. As páginas de código são definidas para oferecer suporte a idiomas ou grupos de idiomas específicos, que compartilham sistemas de escrita comuns. Do ponto de vista da Oracle, os termos página de código e conjunto de caracteres têm o mesmo significado. Observe que em ambientes que não sejam Chinês-Japonês-Coreano, o prompt de comando da GUI e do DOS do Windows não usa a mesma página de código.
Como resultado, o Windows usa dois conjuntos de caracteres diferentes para os ambientes ANSI (sqlplusw.exe) e OEM (caixa dos - sqlplus.exe).
No Registro:
nos sistemas Windows, certifique-se de ter definido uma subchave de registro NLS_LANG para cada um dos seus Homes da Oracle:
Você pode modificar facilmente essa subchave com o Editor de Registro do Windows:
Iniciar -> Executar...
Digite "regedit" e clique em "ok"
Edite a seguinte entrada de registro:
Para o Oracle versão 7:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
Para o Oracle Database versões 8, 8i e 9i:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEx\
onde "x" é o número exclusivo que identifica a página inicial da Oracle.
HOME0 é a primeira instalação
Para o Oracle Database 10g:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_
Lá você tem uma entrada com o nome NLS_LANG
Ao iniciar as ferramentas Oracle, como SQL*Plusw, ele lerá o conteúdo do arquivo oracle.key localizado no mesmo diretório para determinar qual árvore de registro será usada e, portanto, qual subchave NLS_LANG será usada.
Observação:
Algumas pessoas ficam confusas ao encontrar um conjunto NLS_LANG definido como "NA" em HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE quando nenhuma versão 7 foi instalada. Isso é usado para compatibilidade com versões anteriores e pode ser ignorado.
Como uma Variável de Ambiente do Sistema ou do Usuário, nas propriedades do Sistema:
Embora o Registro seja o repositório principal de configurações no Windows, não é o único local em que os parâmetros podem ser definidos. Mesmo se não for recomendado, você pode definir o NLS_LANG como uma Variável de Ambiente do Sistema ou do Usuário nas propriedades do Sistema.
Essa configuração será usada para TODAS as páginas iniciais da Oracle.
Para verificar e modificá-las:
Clique com o botão direito do mouse no 'ícone Meu Computador -> 'Propriedades'
Selecione a 'Guia Avançado -> Clique em 'Variáveis de Ambiente'
A 'lista Variáveis de Usuário contém as configurações do usuário específico do SO conectado atualmente e as 'variáveis de todo o sistema para todos os usuários.
Como essas variáveis de ambiente têm precedência sobre os parâmetros já definidos no seu Registro, você não deve definir os parâmetros Oracle nesse local, a menos que tenha um bom motivo.
Como uma variável de Ambiente definida no prompt de comando:
Antes de usar uma ferramenta de linha de comando Oracle, você precisa DEFINIR MANUALMENTE o parâmetro NLS_LANG. Em um prompt de comando do MS-DOS, use o comando set, por exemplo:
C:\> set NLS_LANG=american_america.WE8PC850
Agora que você sabe como o NLS_LANG está definido, pode verificar se está de acordo com a página de código ANSI atual. O ACP (Página de Código ANSI) é definido pela configuração "localidade padrão" do Windows, portanto, se você possui um cliente Windows 2000 no Reino Unido e deseja inserir Cirílico (Russo), precisa alterar o ACP (alterando a "localidade padrão") para poder inserir Russo.
Você' encontrará seu valor no registro:
Iniciar -> Executar...
Digite "regedit" e clique em "ok"
Procure a seguinte entrada de registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NLS\CodePage\
Lá você tem (até o fim) uma entrada com o nome de ACP. O valor de ACP é sua página de código da GUI atual, para o mapeamento para o nome Oracle. Como existem muitas entradas de registro com nomes muito semelhantes, verifique se você está procurando o lugar certo no registro.
Além disso, a seguinte URL fornece uma lista das páginas de código padrão para todas as versões do Windows:
http://www.microsoft.com/globaldev/reference/
(na guia REFERENCE, à esquerda da página)
OEM = a página de código da linha de comando, ANSI = a página de código da GUI
Observe que Honk Kong HKSCS está listado aqui:http://www.microsoft.com/hk/hkscs/
Localize o conjunto de caracteres do cliente Oracle correspondente:
Encontre o conjunto de caracteres do cliente Oracle na tabela abaixo com base no ACP encontrado acima. Observe que há apenas um valor CORRETO para um determinado ACP.
Página de Código ANSI (ACP) | Conjunto de caracteres do Oracle Client (terceira parte de NLS_LANG) |
---|---|
1250 |
EE8MSWIN1250 |
1251 |
CL8MSWIN1251 |
1252 |
WE8MSWIN1252 |
1253 |
EL8MSWIN1253 |
1254 |
TR8MSWIN1254 |
1255 |
IW8MSWIN1255 |
1256 |
AR8MSWIN1256 |
1257 |
BLT8MSWIN1257 |
1258 |
VN8MSWIN1258 |
874 |
TH8TISASCII |
932 |
JA16SJIS |
936 |
ZHS16GBK |
949 |
KO16MSWIN949 |
950 |
ZHT16MSWIN950 - exceto Hong Kong (veja abaixo) |
Este é o conjunto de caracteres usado pela SQL*Plus da GUI (sqlplusW.exe/plus80W.exe/plus33W.exe) que você inicia no menu Iniciar do Windows. Observe a diferença entre o SQL*Plus da GUI e o SQL*Plus do "modo DOS".
Você pode usar o UTF8 como conjunto de caracteres do cliente Oracle (=NLS_LANG) no Windows NT, 2000 e XP, mas estará limitado a usar apenas programas clientes que suportem explicitamente essa configuração. Isso ocorre porque a interface do usuário do Win32 não é UTF8, portanto, o programa cliente precisa executar conversões explícitas entre o UTF8 (usado no lado Oracle) e o UTF16 (usado no lado Win32).
Defina-o no seu Registro:
Use o Editor do Registro do Windows para configurar o NLS_LANG na sua Página Inicial da Oracle com o valor que você acabou de encontrar acima.
O modo MS-DOS usa, com algumas exceções, como CJK, (Japonês, Coreano, Chinês Simplificado e Chinês Tradicional) uma página de código diferente (chamada de página de código OEM) da GUI do Windows (página de código ANSI). Isso significa que, antes de usar uma ferramenta da linha de comando da Oracle, como SQL*Plus (sqlplus.exe/plus80.exe/plus33.exe) en svrmgrl em um prompt de comando, você precisará DEFINIR MANUALMENTE o parâmetro NLS_LANG como uma variável de ambiente com o comando DOS configurado ANTES de usar a ferramenta.
Para Japonês, Coreano, Chinês Simplificado e Chinês Tradicional, a página de código OEM do MS-DOS (CJK) é idêntica à página de código ANSI, o que significa que, nesse caso específico, não há necessidade de definir o parâmetro NLS_LANG no modo MS-DOS.
Em todos os outros casos, é necessário configurá-lo para substituir a chave de registro NLS_LANG que já corresponde à página de código ANSI. O novo NLS_LANG no "MS-DOS dedicado" precisa corresponder à página de código OEM do MS-DOS que pode ser recuperada digitando chcp em um Prompt de Comando:
C:\> chcp
Página de código ativa: 437
C:\> set NLS_LANG=american_america.US8PC437
Se o parâmetro NLS_LANG para a sessão no modo MS-DOS não estiver definido adequadamente, as mensagens de erro e os dados poderão ser corrompidos devido à conversão incorreta do conjunto de caracteres.
Use a lista a seguir para encontrar o conjunto de caracteres da Oracle que se ajusta à sua página de código do MS-DOS em uso no seu sistema de localidade:
Página de código do MS-DOS | Conjunto de caracteres do Oracle Client (terceira parte de NLS_LANG) |
---|---|
437 |
US8PC437 |
737 |
EL8PC737 |
850 |
WE8PC850 |
852 |
EE8PC852 |
857 |
TR8PC857 |
858 |
WE8PC858 |
861 |
IS8PC861 |
862 |
IW8PC1507 |
865 |
N8PC865 |
866 |
RU8PC866 |
Observação: esta é a configuração correta para a versão GUI SQL*Plus, (sqlplusW.exe/ plus80W.exe / plus33W.exe )
Se você estiver testando com caracteres "especiais", USE a GUI e não use o sqlplus.exe da "caixa DOS"!
Operating System Locale | Valor NLS_LANG |
---|---|
Árabe (EAU) |
ARABIC_UNITED ARAB EMIRATES.AR8MSWIN1256 |
Búlgaro |
BULGARIAN_BULGARIA.CL8MSWIN1251 |
Catalão |
CATALAN_CATALONIA.WE8MSWIN1252 |
Chinês (RPC) |
CHINESE_CHINA.ZHS16GBK SIMPLIFICADO |
Chinês (Taiwan) |
CHINESE_TAIWAN.ZHT16MSWIN950 TRADICIONAL |
Chinês (Hong Kong HKCS) |
CHINESE_HONG KONG.ZHT16HKSCS TRADICIONAL |
Chinês (Hong Kong HKCS2001) |
CHINESE_HONG KONG.ZHT16HKSCS2001 TRADICIONAL (novo em 10gR1) |
Croata |
CROATIAN_CROATIA.EE8MSWIN1250 |
Tcheco |
CZECH_CZECH REPUBLIC.EE8MSWIN1250 |
Dinamarquês |
DANISH_DENMARK.WE8MSWIN1252 |
Holandês (Holanda) |
DUTCH_THE NETHERLANDS.WE8MSWIN1252 |
Holandês (Bélgica) |
DUTCH_BELGIUM.WE8MSWIN1252 |
Inglês (Reino Unido) |
ENGLISH_UNITED KINGDOM.WE8MSWIN1252 |
Inglês (Estados Unidos) |
AMERICAN_AMERICA.WE8MSWIN1252 |
Estoniano |
ESTONIAN_ESTONIA.BLT8MSWIN1257 |
Finlandês |
FINNISH_FINLAND.WE8MSWIN1252 |
Francês (Canadá) |
CANADIAN FRENCH_CANADA.WE8MSWIN1252 |
Francês (França) |
FRENCH_FRANCE.WE8MSWIN1252 |
Alemão (Alemanha) |
GERMAN_GERMANY.WE8MSWIN1252 |
Grego |
GREEK_GREECE.EL8MSWIN1253 |
Hebraico |
HEBREW_ISRAEL.IW8MSWIN1255 |
Húngaro |
HUNGARIAN_HUNGARY.EE8MSWIN1250 |
Islandês |
ICELANDIC_ICELAND.WE8MSWIN1252 |
Indonésio |
INDONESIAN_INDONESIA.WE8MSWIN1252 |
Italiano (Itália) |
ITALIAN_ITALY.WE8MSWIN1252 |
Japonês |
JAPANESE_JAPAN.JA16SJIS |
Coreano |
KOREAN_KOREA.KO16MSWIN949 |
Letão |
LATVIAN_LATVIA.BLT8MSWIN1257 |
Lituano |
LITHUANIAN_LITHUANIA.BLT8MSWIN1257 |
Norueguês |
NORWEGIAN_NORWAY.WE8MSWIN1252 |
Polonês |
POLISH_POLAND.EE8MSWIN1250 |
Português (Brasil) |
BRAZILIAN PORTUGUESE_BRAZIL.WE8MSWIN1252 |
Português (Portugal) |
PORTUGUESE_PORTUGAL.WE8MSWIN1252 |
Romeno |
ROMANIAN_ROMANIA.EE8MSWIN1250 |
Russo |
RUSSIAN_CIS.CL8MSWIN1251 |
Eslovaco |
SLOVAK_SLOVAKIA.EE8MSWIN1250 |
Espanhol (Espanha) |
SPANISH_SPAIN.WE8MSWIN1252 |
Sueco |
SWEDISH_SWEDEN.WE8MSWIN1252 |
Tailandês |
THAI_THAILAND.TH8TISASCII |
Espanhol (México) |
MEXICAN SPANISH_MEXICO.WE8MSWIN1252 |
Espanhol (Venezuela) |
LATIN AMERICAN SPANISH_VENEZUELA.WE8MSWIN1252 |
Turco |
TURKISH_TURKEY.TR8MSWIN1254 |
Ucraniano |
UKRAINIAN_UKRAINE.CL8MSWIN1251 |
Vietnamita |
VIETNAMESE_VIETNAM.VN8MSWIN1258 |
Observação: esta é a configuração correta para configurar a versão DOS BOX SQL*Plus, (sqlplus.exe/ plus80.exe / plus33.exe )
Operating System Locale | Conjunto de caracteres do Oracle Client (terceira parte de NLS_LANG) |
---|---|
Árabe |
AR8ASMO8X |
Catalão |
WE8PC850 |
Chinês (RPC) |
ZHS16GBK |
Chinês (Taiwan) |
ZHT16MSWIN950 |
Tcheco |
EE8PC852 |
Dinamarquês |
WE8PC850 |
Holandês |
WE8PC850 |
Inglês (Reino Unido) |
WE8PC850 |
Inglês (Estados Unidos) |
US8PC437 |
Finlandês |
WE8PC850 |
Francês |
WE8PC850 |
Alemão |
WE8PC850 |
Grego |
EL8PC737 |
Hebraico |
IW8PC1507 |
Húngaro |
EE8PC852 |
Italiano |
WE8PC850 |
Japonês |
JA16SJIS |
Coreano |
KO16MSWIN949 |
Norueguês |
WE8PC850 |
Polonês |
EE8PC852 |
Português |
WE8PC850 |
Romeno |
EE8PC852 |
Russo |
RU8PC866 |
Eslovaco |
EE8PC852 |
Esloveno |
EE8PC852 |
Espanhol |
WE8PC850 |
Sueco |
WE8PC850 |
Turco |
TR8PC857 |
O que o componente de IDIOMA do parâmetro NLS_LANG controla?
Cada componente de idioma do parâmetro NLS_LANG controla a operação de um subconjunto de recursos de suporte à globalização: Ele especifica convenções como o idioma usado para mensagens da Oracle, classificação, nomes de dias e nomes de meses. Cada idioma suportado possui um nome exclusivo; por exemplo, AMERICANO, FRANCÊS ou ALEMÃO. O argumento idioma especifica valores padrão para o território e os argumentos do conjunto de caracteres. Se o idioma não for especificado, o valor padrão será AMERICANO.
O que o componente de TERRITÓRIO do parâmetro NLS_LANG controla?
Cada componente de território do parâmetro NLS_LANG controla a operação de um subconjunto de recursos de suporte à globalização: Ele especifica convenções como a data padrão, os formatos monetário e numérico. Cada território suportado possui um nome exclusivo, como, por exemplo, AMÉRICA, FRANÇA ou CANADÁ. Se o território não for especificado, o valor será derivado do valor do idioma.
Para encontrar o valor numérico real de um caractere armazenado no banco de dados, use o comando dump:
A sintaxe da chamada de função é:
DUMP( <value> [, <format> [, <offset> [, <length> ] ] ] )
onde:
value - é o valor a ser exibido
format - é um número que descreve o formato no qual os bytes do valor devem ser exibidos: 8 - significa octal, 10 - significa decimal, 16 - significa hexadecimal; outros valores entre 0 e 16 casas decimais médias; valores maiores que 16 são um pouco confusos e significam: imprimir bytes como caracteres ASCII se corresponderem a códigos ASCII imprimíveis, imprimi-los como "^x" se corresponderem aos códigos de controle ASCII e imprimi-los em hexadecimais; adicionar 1000 ao número do formato adicionará informações do conjunto de caracteres para os valores do tipo de dados de caracteres para o deslocamento do valor de retorno - é o deslocamento do primeiro byte do valor a ser exibido; os valores negativos significam a contagem a partir do tamanho final - é o número de bytes a ser exibido. Então, por exemplo,
SQL> SELECT DUMP(col,1016)FROM table;
Typ=1 Len=39 CharacterSet=UTF8: 227,131,143,227,131,170
retorna o valor de uma coluna composta por 3 caracteres japoneses na codificação UTF8. Por exemplo, o primeiro caractere é 227(*255)+131. Você provavelmente precisará convertê-lo em UCS2 para verificar o valor do ponto de código com a página de código Padrão Unicode.
Onde é Feita a Conversão de Caracteres?
Normalmente, a conversão é feita no lado do cliente por razões de desempenho. Isso é verdade a partir da Versão 8.0.4 em diante. Se o banco de dados estiver usando um conjunto de caracteres não conhecido pelo cliente, a conversão será feita no lado do servidor. Isso é verdade a partir da Versão 8.1.6 em diante.
O Windows SQL*Plus não está mostrando todos os meus caracteres estendidos?
Você enxergará quadrados pretos em vez dos caracteres. Isso significa que você nõ possui a fonte correta para o seu código. Uma fonte é uma coleção de glifos (de "hieróglifos") que compartilham aparência comum (tipo de letra, tamanho de caractere). Uma fonte é usada pelo sistema operacional para converter um valor numérico em uma representação gráfica na tela. Uma fonte não contém necessariamente uma representação gráfica para todos os valores numéricos definidos na página de códigos que você está usando. É por isso que, às vezes, você obtém quadrados pretos na tela se você alterar as fontes e a nova fonte não tiver representação para um determinado símbolo.
O utilitário "Character Set Map" do Windows pode ser usado para ver quais glifos fazem parte de uma determinada fonte.
No Windows 2000 e XP:
Iniciar -> Executar...
Digite "charmap" e clique em "ok".
Recebo um ponto de interrogação ou ponto de interrogação invertido ao selecionar novamente os caracteres recém-inseridos?
Quando os caracteres são convertidos entre o cliente e o conjunto de caracteres do banco de dados, ou vice-versa, o caractere deve existir em ambos. Se ele não existir no conjunto de caracteres que está sendo convertido para (o destino), um caractere de substituição será usado. Alguns conjuntos de caracteres possuem caracteres de substituição específicos definidos ao converter de outros conjuntos de caracteres específicos, mas onde isso não é feito, um caractere de substituição padrão, como?, é usado. A conversão de um caractere de substituição para o original não é possível.
iSQL*Plus é o único cliente habilitado para UTF8/Unicode suportado?
No sistema operacional Windows, sim, no sistema operacional Unix, não. Todos os utilitários de banco de dados, incluindo Import, Export, SQL*Loader, SQL*Plus, podem atuar como um cliente UTF-8 se o código do idioma do SO for UTF-8 (por exemplo, en_US.UTF-8 no Linux) e o conjunto de caracteres NLS_LANG for definido como UTF8 ou AL32UTF8.
Como verificar os pontos de código gerenciados por um Sistema Operacional UNIX?
Para saber qual ponto de código é gerado para um caractere em um ambiente Unix, você pode usar o comando "od":
$ echo "" | od -xc
Você também pode verificar o caractere correspondente a um ponto de código usando o comando "echo" desta forma:
para Solaris, AIX, HP-UX, TRU64:
$echo '\0351'
para Linux:
$echo -e '\0351'
Você pode usar o Locale Builder ou uma página de código impressa (consulte os links abaixo) para verificar se sua página de código nativa e a configuração NLS_LANG correspondem corretamente. Se houver alguma ambiguidade, use o comando acima para obter os valores para mais de um caractere. Para página de código impressa:
Normalmente, o NLS_LANG precisa corresponder à página de código OEM do MS-DOS que pode ser recuperada digitando chcp em um prompt de comando:
C:\> chcp
Página de código ativa: 437
C:\> set NLS_LANG=american_america.US8PC437
Para ferramentas como o SQL*Loader, você pode alterar temporariamente o NLS_LANG para o conjunto de caracteres do ARQUIVO que está carregando. Uma alternativa para alterar NLS_LANG é especificar o conjunto de caracteres dos dados no arquivo de dados usando a palavra-chave do conjunto de caracteres no arquivo .ctl. Nesse caso, o SQL*Loader interpretará os dados no arquivo de dados como esse conjunto de caracteres, independentemente da configuração do conjunto de caracteres do cliente NLS_LANG. Aqui está um exemplo de arquivo .ctl para utf16. Este exemplo é enviado na área de demonstração:
-- Copyright (c) 2001 by Oracle Corporation
-- NAME
-- ulcase11.ctl - Load Data in the Unicode Character Set UTF-16
-- DESCRIPTION
-- Loads data in the Unicode character set UTF-16. The data is in little
-- Endean byte order. This means that depending on whether SQL*Loader is
-- running on a little Endean or a big Endean system, it will have to
-- byte swap the UTF-16 character data as necessary. This load uses
-- character length semantics, the default for the character set UTF-16.
--
-- This case study is modeled after case study 3 (ulcase3), which loads
-- variable length delimited (terminated and enclosed) data.
--
-- RETURNS
--
-- NOTES
-- None
-- MODIFIED (MM/DD/YY)
-- rpfau 02/06/01 - Merged rpfau_sqlldr_add_case_study_11
-- rpfau 01/30/01 - Creation
--
LOAD DATA
CHARACTERSET utf16
BYTEORDER little
INFILE ulcase11.dat
REPLACE
INTO TABLE EMP
FIELDS TERMINATED BY X'002c' OPTIONALLY ENCLOSED BY X'0022'
(empno integer external (5), ename, job, mgr,
hiredate DATE(20) "DD-Month-YYYY",
sal, comm,
deptno CHAR(5) TERMINATED BY ":",
projno,
loadseq SEQUENCE(MAX,1) )
No Oracle9i, o utilitário Export sempre exporta dados do usuário, incluindo dados Unicode, no conjunto de caracteres do banco de dados. O utilitário Import converte automaticamente os dados no conjunto de caracteres do banco de dados de destino.
No Oracle8i, o utilitário Export exporta dados do usuário, convertendo-os do conjunto de caracteres do banco de dados para o conjunto de caracteres do NLS_LANG da sessão Export. O utilitário Import primeiro converte os dados no conjunto de caracteres do NLS_LANG da sessão Import e depois os converte no conjunto de caracteres do banco de dados de destino. Deve-se tomar cuidado para que o conjunto de caracteres de NLS_LANG para as sessões Export e Import contenha todos os caracteres a serem migrados. Esse conjunto de caracteres geralmente é escolhido para ser o banco de dados de origem ou de destino e geralmente é o mesmo para as sessões Export (Exportar) e Import (Importar). Essa opção é recomendada especialmente com conjuntos de caracteres multibyte, que apresentam algumas restrições nos arquivos de exportação. As conversões Oracle8i de e para o conjunto de caracteres NLS_LANG acontecem no Oracle9i para instruções DDL contidas no arquivo de exportação.
O NLS_LANG no servidor (ou cliente) não influencia a conversão do conjunto de caracteres por meio de um link de banco de dados. A Oracle fará a conversão do conjunto de caracteres do banco de dados de origem para o conjunto de caracteres do banco de dados de destino (ou inverso).
Não há nada de especial no NLS_LANG e nas várias páginas iniciais no Windows. O parâmetro levado em consideração é o especificado na chave de registro ORACLE_HOME usada pelo executável. Se o NLS_LANG estiver definido no ambiente, ele terá precedência sobre o valor no registro e será usado para TODAS AS Oracle_Homes no servidor/cliente.
O NLS_LANG pode ser encontrado nessas chaves de registro:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
ou
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEx
No Windows, existem dois tipos de ferramentas/aplicativos:
O único cliente compatível com Unicode incluído no Oracle database é o iSQL*Plus.
Um conjunto de caracteres é apenas um acordo sobre qual valor numérico um símbolo possui. Um computador não sabe o que é 'A ou 'B' ele conhece apenas o valor numérico (binário) desse símbolo, definido no conjunto de caracteres usado pelo sistema operacional (SO) ou no hardware (firmware) dos terminais. Um computador pode apenas manipular números, e é por isso que há uma necessidade de conjuntos de caracteres. Um exemplo é 'ASCII', um conjunto de caracteres antigo de 7 bits, 'ROMAN8 um conjunto de caracteres de 8 bits no UNIX ou 'UTF8 um conjunto de caracteres multibyte.
Uma página de código é o nome dos esquemas de codificação do Windows/DOS. Para Oracle NLS, você pode considerá-lo o mesmo que um conjunto de caracteres. Você também precisa distinguir entre uma FONTE e uma página de códigos/conjunto de caracteres. Uma fonte é usada pelo SO para converter valores numéricos e exibí-los na tela em forma de gráficos. A Fonte Wingdings no Windows é o melhor exemplo de fonte em que um 'A' NÃO é mostrado como um 'A' na tela, mas para o sistema operacional, o valor numérico representa um 'A'. Você não o VÊ como um 'A', mas para o Windows, é um 'A' e será salvo (ou usado) como um 'A'.
Para entender melhor a explicação acima, basta abrir o MS Word, escolher a Fonte Wingdings, digitar seu nome (você verá símbolos) e salvá-lo como html. Se você abrir o arquivo html no Bloco de Notas, verá que na seção <style>, as fontes são declaradas e minúsculas na seção <body>, você encontrará seu nome em texto simples, mas com o atributo style='font-family: Wingdings'. Se você o abrir no Internet Explorer ou Netscape, verá novamente os símbolos Wingdings. É a apresentação que muda, não os dados em si.
Também é possível que você não veja com uma fonte específica, todos os símbolos definidos na página de código que você está usando, apenas porque o criador da FONTE não incluiu uma representação gráfica para todos os símbolos nessa fonte. É por isso que, às vezes, você obtém quadrados pretos na tela se alterar as fontes. No Windows, você pode usar a ferramenta 'Mapa de Caracteres' para ver todos os símbolos definidos em uma fonte.
Duas razões principais:
Ao longo do tempo, os fornecedores definiram 'conjuntos de caracteres diferentes para seu hardware e software, principalmente porque não existiam padrões oficiais.
Novos conjuntos de caracteres foram definidos para suportar novos idiomas. Com um conjunto de caracteres de 8 bits, você é limitado no número de símbolos que pode suportar, para que haja conjuntos de caracteres diferentes para diferentes idiomas escritos.
Um conjunto de caracteres de 7 bits conhece apenas 128 símbolos (2^7)
Um conjunto de caracteres de 8 bits conhece 256 símbolos (2^8)
Unicode (UTF-8) é um conjunto de caracteres multibyte. Unicode tem a capacidade de definir mais de um milhão de caracteres. Para obter mais informações sobre Unicode, consulte o artigo técnico Suporte ao Banco de Dados Unicode da Oracle (PDF)
Uma consideração básica para escolher um conjunto de caracteres é garantir que ele possa lidar com qualquer idioma que precise ser suportado imediatamente e em futuro indeterminado. Outra consideração negligenciada é pensar em quais aplicativos e tecnologias você pode querer utilizar ou interagir com o banco de dados. Use o construtor de código do idioma (do Oracle Database 9i em diante) para visualizar quais caracteres são definidos para um conjunto de caracteres Oracle específico.
A escolha de Unicode como o conjunto de caracteres do banco de dados garante uma base sólida para tudo o que estiver embutido e sobre o banco de dados. A Oracle recomenda usar Unicode para todas as novas implementações de sistema. A migração de sistemas legados para Unicode também é recomendada. A implementação de seus sistemas hoje no Unicode oferece muitas vantagens em usabilidade, compatibilidade e extensibilidade. O suporte abrangente da Oracle permite implementar sistemas de alto desempenho com mais rapidez e facilidade, aproveitando o verdadeiro poder do Unicode. Mesmo que não seja necessário oferecer suporte a dados multilíngues hoje ou ter algum requisito para o Unicode, ainda é provável que seja a melhor escolha para um novo sistema a longo prazo, economizando tempo e dinheiro e oferecendo vantagens competitivas.