All Products
Search
Document Center

Data Transmission Service:Kehilangan data akibat perbedaan sensitivitas huruf besar/kecil pada set karakter

Last Updated:Jun 21, 2026

Jika database sumber dan tujuan menggunakan set karakter dengan sensitivitas huruf besar/kecil yang tidak konsisten, Anda mungkin mengalami kehilangan data di database tujuan selama migrasi atau sinkronisasi data menggunakan DTS. Topik ini menjelaskan cara mencegah masalah tersebut.

Gejala

Database yang berbeda menangani sensitivitas huruf besar/kecil secara berbeda. Jika terdapat ketidaksesuaian dalam sensitivitas huruf besar/kecil antara database sumber dan tujuan, data mungkin hilang di database tujuan setelah migrasi atau sinkronisasi selesai.

Contoh

Contoh ini menggunakan database sumber Oracle dan database tujuan MySQL untuk menggambarkan bagaimana ketidaksesuaian sensitivitas huruf besar/kecil dapat menyebabkan kehilangan data.

Oracle dan MySQL memiliki perilaku default yang berbeda terkait sensitivitas huruf besar/kecil.

  • Oracle: Secara default, Oracle bersifat case-sensitive, sehingga memungkinkan penyisipan nilai yang hanya berbeda dalam kapitalisasi—misalnya 'a' dan 'A'—ke dalam kolom dengan primary key atau unique key.
  • MySQL: Sensitivitas huruf besar/kecil ditentukan oleh collation. Collation yang diakhiri dengan "_ci" bersifat case-insensitive, sedangkan yang diakhiri dengan "_cs" bersifat case-sensitive. Dengan collation "_ci", nilai yang hanya berbeda dalam kapitalisasi—seperti 'a' dan 'A'—dianggap identik, sehingga tidak dapat dimasukkan ke dalam kolom dengan primary key atau unique key.

Skenario migrasi: Anda melakukan migrasi data dari database sumber Oracle ke database tujuan MySQL menggunakan DTS. Dalam konfigurasi task, opsi Schema Migration tidak dipilih. Setelah migrasi selesai, Anda memeriksa data di database tujuan.

Jenis database Set karakter Deskripsi Data database
Database sumber: Oracle AL32UTF Objek migrasi: gb.test
create table gb.test
(id int primary key, name varchar2(10))
Data di database sumber adalah sebagai berikut:
SQL> select * from test;

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

6 rows selected.
Masukkan 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;
Database tujuan: MySQL utf8
Catatan Secara default bersifat case-insensitive.
Anda harus membuat struktur tabel berikut:
create table
test.test (auto_id int primary key auto_increment, name varchar(10), unique
key(name))
Setelah migrasi selesai, data di database tujuan adalah sebagai berikut:
mysql> select * from test;
+---------+------+
| auto_id | name |
+---------+------+
|       4 | a    |
|       5 | abc  |
+---------+------+
2 rows in set (0.01 sec)

Penyebab

Database sumber dan tujuan menggunakan set karakter dengan sensitivitas huruf besar/kecil yang tidak konsisten.

Resolusi

  • Tinjau logika aplikasi Anda untuk menentukan apakah perlu menyimpan data yang hanya berbeda dalam kapitalisasi, seperti 'abc' dan 'Abc'. Jika tidak diperlukan, terapkan kapitalisasi yang konsisten—misalnya, konversi semua string menjadi huruf kecil sebelum menulisnya ke database.
  • Jika database sumber bersifat case-sensitive, pastikan database tujuan dikonfigurasi dengan collation yang case-sensitive. Sebagai contoh, pada MySQL, pilih collation yang diakhiri dengan _cs.