Alex Kochis, manajer produk senior untuk "Program Nilai Tambah Asli Windows", menulis dalam sebuah blog bahwa kesalahan manusia menyebabkan kesalahan tersebut. Alex mengatakan bahwa perangkat lunak baru secara tidak sengaja dimuat ke server yang menjalankan WGA beroperasi secara normal, dan aplikasi wajar dari pengguna perangkat lunak asli tidak dapat diproses dengan benar. Basis data yang digunakan oleh pelanggan adalah MySQL, dan produk yang dikembangkan mendukung Oracle agar pelanggan dapat membayarnya, kita harus mengubah lingkungan basis data dari Oracle ke MySQL. Permasalahan berikut ini kami temui pada saat proses konversi, dan kami berharap dapat memberikan referensi bagi rekan-rekan yang mengalami permasalahan yang sama. Jika kita memperhatikan portabilitas database selama desain awal dan proses pengkodean, tidak perlu melakukan pekerjaan tambahan apa pun dalam hal ini.
1. Masalah yang dihadapi ketika lingkungan database berubah dari Oracle ke MySQL.
Karena logikanya tetap tidak berubah, prinsipnya tidak mengubah kode aplikasi, hanya pembuatan/inisialisasi sql dari tabel database. Berikut permasalahan yang kami temui dan solusinya.
1. Perbedaan peka huruf besar/kecil (jika OS servernya Linux).
Oracle umumnya tidak peka huruf besar-kecil. Terkadang kita tidak memperhatikan masalah kasus saat menggunakan Oracle. Nama tabel dan nama field tidak peka huruf besar-kecil tanpa tanda kutip ganda. Seperti ini: masukkan ke dalam nama tabel dan masukkan ke dalam TABLENAME memiliki efek yang sama. inisialisasi data. Script, hasil yang diperoleh umumnya dikonversi ke nama tabel huruf besar dan nama field.
Namun di MySQL, sensitivitas huruf besar-kecil dari sistem operasi yang digunakan menentukan sensitivitas huruf besar-kecil pada nama database dan nama tabel. Basis data berhubungan dengan direktori di direktori data, dan setiap tabel dalam basis data berhubungan dengan setidaknya satu file di direktori basis data (atau beberapa, bergantung pada mesin penyimpanan). Oleh karena itu, menggunakan database atau tabel sebenarnya memanipulasi file (folder) ini, sehingga sensitivitas huruf besar-kecil pada sistem operasi menentukan sensitivitas huruf besar-kecil pada nama database dan nama tabel. Ini peka huruf besar-kecil pada sistem operasi dengan Linux sebagai kernelnya.
Solusinya adalah menjaga nama database MySQL tetap konsisten dengan kasus Oracle, dan nama tabel konsisten dengan nama tabel pada string SQL di aplikasi. Jika nama field di aplikasi menggunakan tanda kutip ganda, silakan ubah nama field dalam SQL Kasus nama harus konsisten dengan karakter yang diapit tanda kutip ganda. Jika nama tabel dan field yang direferensikan oleh aplikasi Anda tidak memiliki huruf besar/kecil yang seragam, Anda akan berada dalam masalah besar.
2. Perbedaan antara kata-kata yang dilindungi undang-undang.
Nama fungsi dalam bahasa SQL (seperti inteval, show) adalah kata-kata yang dicadangkan. Kata-kata yang dicadangkan di Oracle dapat digunakan sebagai nama tabel dan nama bidang, dan tidak mempengaruhi penggunaannya. Namun, kata-kata yang dicadangkan di MySQL tidak dapat digunakan sebagai nama tabel dan nama bidang. Jika digunakan, kesalahan sintaksis akan dilaporkan.
Solusinya adalah dengan mengutip kata-kata yang dicadangkan dalam pernyataan SQL dengan simbol '`', yang terletak di atas tombol tab pada keyboard; jika itu adalah nama bidang, ada metode lain nama tabel.nama bidang. Seperti ini: masukkan ke nama tabel (id, `interval`) value(….. atau masukkan ke nama tabel (id, nama tabel.inteval) value(….. .
3. Perbedaan tipe data.
Di mysql, tidak ada varchar2 dan angka seperti di Oracle. Mysql memiliki varchar dan numerik yang sesuai.
Solusinya adalah penggantian.
4. Perbedaan antara tipe pertumbuhan otomatis.
Oracle memiliki urutan, tetapi mysql tidak, tetapi memiliki atribut auto_increment.
Solusinya adalah dengan mengkonversi urutan di Oracle untuk menggunakan atribut auto_increment. Dalam beberapa kasus, mungkin ada cara untuk memecahkan masalah.
5. Perbedaan batas panjang indeks.
Mulai dari MySQL 4.1.2, panjang indeks tabel MyISAM dan InnoDB mendukung 1000 byte, yang berarti panjang bidang indeks tidak boleh melebihi 1000 byte. Jika melebihi, kesalahan berikut akan dilaporkan: ERROR 1071 (42000): Kunci yang ditentukan terlalu panjang; panjang kunci maksimal adalah 1000 byte. Jika pengkodean UTF-8, panjangnya setara dengan 333 karakter (karena satu karakter UTF8 menempati 3 byte). Batas panjang indeks Oracle jauh lebih longgar dibandingkan MySQL.
Tidak perlu menguraikan solusinya, baik mengubah definisi indeks atau mengubah panjang definisi bidang.
2. Apa yang harus kita perhatikan untuk kompatibilitas database?
Kompatibilitas database harus menjadi masalah yang harus diperhatikan dalam desain database, karena terkadang pelanggan memiliki database yang sudah digunakan dan tidak ingin memelihara dua database secara bersamaan suatu nilai jual dari produk tersebut.
Kunci untuk mencapai kompatibilitas database adalah dengan mematuhi penggunaan standar.
1. Ikuti penggunaan standar dan usahakan untuk tidak menggunakan penggunaan spesifik database tertentu.
Seperti penggunaan simbol '`' msyql,
Contoh lain, banyak orang menggunakan Oracle untuk membuat urutan, SELECT seq.nextval FROM DUAL; sebelum memasukkan data ke dalam tabel, lalu masukkan nilai yang diperoleh dari kueri ke dalam tabel sebagai nilai tidak berfungsi. Ini tidak cocok untuk database tanpa urutan. Setiap database memiliki penggunaan pertumbuhan otomatis.
Contoh lain, database yang berbeda telah memperluas permintaan paging. Postgresql telah mengimbangi dan membatasi, tetapi Oracle tidak.
2. Hindari masalah sensitivitas huruf besar/kecil pada database.
Pilih apakah nama tabel database dan nama field harus dalam huruf besar atau kecil, dan disatukan sepenuhnya selama desain dan pengkodean database.
3. Kata-kata yang dilindungi undang-undang.
Perancang basis data diharuskan untuk mencoba untuk tidak menggunakan kata-kata khusus untuk nama tabel dan nama bidang. Banyak juga yang menggunakan cara ini dengan menambahkan '_' sebelum nama tabel dan nama field, seperti ini: buat tabel _namatabel (_id integer). Dengan cara ini Anda tidak akan pernah mengalami masalah yang disebabkan oleh kata-kata yang dilindungi undang-undang.