Quando os bancos de dados de origem e destino usam conjuntos de caracteres com sensibilidade a maiúsculas e minúsculas inconsistente, pode ocorrer perda de dados no banco de dados de destino durante a migração ou sincronização de dados pelo DTS. Este tópico descreve como evitar esse problema.
Sintomas
Bancos de dados diferentes tratam a sensibilidade a maiúsculas e minúsculas de formas distintas. Havendo incompatibilidade nesse comportamento entre os bancos de dados de origem e destino, dados podem estar ausentes no banco de destino após a conclusão da migração ou sincronização.
Exemplo
Este exemplo usa um banco de dados Oracle como origem e um banco de dados MySQL como destino para ilustrar como a incompatibilidade na sensibilidade a maiúsculas e minúsculas pode causar perda de dados.
Os bancos de dados Oracle e MySQL têm comportamentos padrão distintos em relação à sensibilidade a maiúsculas e minúsculas.
Oracle: por padrão, o Oracle diferencia maiúsculas de minúsculas. Isso permite inserir valores que se diferenciam apenas pela capitalização, como 'a' e 'A', em uma coluna com chave primária ou chave única.
MySQL: a sensibilidade a maiúsculas e minúsculas é determinada pelo collation. Em geral, um collation com sufixo "_ci" não diferencia maiúsculas de minúsculas, enquanto um com sufixo "_cs" diferencia. Com um collation "_ci", não é possível inserir valores que diferem apenas pela capitalização, como 'a' e 'A', em uma coluna com chave primária ou chave única, pois são tratados como o mesmo valor.
Cenário de migração: você migra dados de um banco de dados Oracle de origem para um banco de dados MySQL de destino usando o DTS. Na configuração da tarefa, não selecione a opção Schema Migration. Após a conclusão da migração, verifique os dados no banco de dados de destino.
| Database type | Character set | Description | Database data |
| Source database: Oracle | AL32UTF | Migration object: gb.test |
The data in the source database is as follows: |
Insert data: |
|||
| Destination database: MySQL | utf8 Nota Case-insensitive by default. |
You must crie the following table structure: |
After the migration completes, the data in the destination database is as follows: |
Causa
Os bancos de dados de origem e destino usam conjuntos de caracteres com sensibilidade a maiúsculas e minúsculas inconsistente.
Resolução
Revise a lógica da sua aplicação para determinar se é necessário armazenar dados que diferem apenas pela capitalização, como 'abc' e 'Abc'. Se não for um requisito, padronize a capitalização dos dados — por exemplo, convertendo todas as strings para letras minúsculas antes de gravá-las no banco de dados.
Se o banco de dados de origem diferenciar maiúsculas de minúsculas, configure o banco de dados de destino com um collation que também faça essa diferenciação. No MySQL, por exemplo, escolha um collation com sufixo
_cs.