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

Definindo um conjunto de caracteres para uma coluna Para tabelas de banco de dados Oracle


A resposta simples é que, diferentemente do MySQL, conjuntos de caracteres não podem ser definidos em nível da coluna (ou tabela) . Latin1 também não é um conjunto de caracteres Oracle válido.

Os conjuntos de caracteres são consistentes em todo o banco de dados e foram especificados quando você criou o banco de dados. Você pode encontrar seu personagem consultando NLS_DATABASE_PARAMETERS ,
select value
  from nls_database_parameters
 where parameter = 'NLS_CHARACTERSET'

A lista completa de possíveis conjuntos de caracteres está disponível para 11g r2 e para 9i ou você pode consultar V$NLS_VALID_VALUES .

É possível usar o ALTER SESSION declaração para definir o NLS_LANGUAGE ou o NLS_TERRITORY , mas infelizmente você não pode fazer isso para o conjunto de caracteres. Acredito que isso ocorra porque alterar o idioma altera a forma como o Oracle exibiria os dados armazenados, enquanto alterar o conjunto de caracteres mudaria como o Oracle armazena os dados.

Ao exibir os dados, é claro que você pode especificar o conjunto de caracteres necessário em qualquer cliente que estiver usando.

Migração do conjunto de caracteres não é uma tarefa trivial e não deve ser feita de ânimo leve.

Em uma pequena nota lateral, por que você está tentando usar o latim 1? Seria mais normal configurar um novo banco de dados em algo como UTF-8 (também conhecido como AL32UTF8 - não use UTF8 ) ou UTF-16 para que você possa armazenar dados de vários bytes com eficiência. Mesmo se você não precisar dele agora, é aconselhável tentar - sem garantias na vida - proteger seu banco de dados no futuro sem a necessidade de migrar no futuro.

Se você deseja especificar conjuntos de caracteres diferentes para colunas diferentes em um banco de dados, a melhor opção seria determinar se esse requisito é realmente necessário e tentar removê-lo. Se for definitivamente necessário, sua melhor aposta pode ser usar um conjunto de caracteres que seja um superconjunto de todos os conjuntos de caracteres em potencial. Em seguida, tenha algum tipo de restrição de verificação que limite a coluna a valores hexadecimais específicos. Eu não recomendaria fazer isso, o potencial de erros é enorme e é extremamente complexo. Além disso, diferentes conjuntos de caracteres renderizam diferentes valores hexadecimais de maneira diferente. Isso, por sua vez, significa que você precisa impor que uma coluna seja renderizada em um caractere específico, o que é impossível, pois está fora do escopo do banco de dados.

1. Eu estaria interessado em saber a situação