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 |
Data di database sumber adalah sebagai berikut: |
Masukkan data: |
|||
| Database tujuan: MySQL | utf8 Catatan Secara default bersifat case-insensitive. |
Anda harus membuat struktur tabel berikut: |
Setelah migrasi selesai, data di database tujuan adalah sebagai berikut: |
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.