Todos os produtos
Search
Central de documentação

Data Transmission Service:Perda de dados causada por incompatibilidade na sensibilidade a maiúsculas e minúsculas do conjunto de caracteres

Última atualização: Sep 23, 2026

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
create table gb.test
(id int primary key, name varchar2(10))
The data in the source database is as follows:
SQL> select * from test;

    ID NAME
------ ---------
     1 a
     2 A
     3 abc
     4 Abc
     5 aBc
     6 abC

6 rows selected.
Insert data:

insert into test values (1,'a');

insert into test values (2,'A');

insert into test values (3,'abc');

insert into test values (4,'Abc');

insert into test values (4,'aBc');

insert into test values (5,'aBc');

insert into test values (6,'abC');

commit;
Destination database: MySQL utf8
Nota Case-insensitive by default.
You must crie the following table structure:
create table
test.test (auto_id int primary key auto_increment, name varchar(10), unique
key(name))
After the migration completes, the data in the destination database is as follows:
mysql> select * from test;
+---------+------+
| auto_id | name |
+---------+------+
|       4 | a    |
|       5 | abc  |
+---------+------+
2 rows in set (0,01 sec)

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.