Alex Kochis ผู้จัดการผลิตภัณฑ์อาวุโสของ "โปรแกรมเสริม Windows ของแท้" ของ Microsoft เขียนในบล็อกว่าข้อผิดพลาดของมนุษย์ทำให้เกิดข้อผิดพลาด Alex กล่าวว่าซอฟต์แวร์ใหม่ถูกโหลดไปยังเซิร์ฟเวอร์ที่ใช้ WGA โดยไม่ได้ตั้งใจ ส่งผลให้เซิร์ฟเวอร์ไม่สามารถทำได้ ทำงานตามปกติ และแอปพลิเคชันที่เหมาะสมจากผู้ใช้ซอฟต์แวร์ของแท้ไม่สามารถประมวลผลได้อย่างถูกต้อง ฐานข้อมูลที่ลูกค้าใช้คือ MySQL และผลิตภัณฑ์ที่พัฒนาแล้วรองรับ Oracle เพื่อให้ลูกค้าชำระเงิน เราต้องเปลี่ยนสภาพแวดล้อมฐานข้อมูลจาก Oracle เป็น MySQL เราพบปัญหาต่อไปนี้ในระหว่างขั้นตอนการแปลง และเราหวังว่าจะให้ข้อมูลอ้างอิงแก่เพื่อนร่วมงานที่ประสบปัญหาเดียวกัน หากเราใส่ใจกับความสามารถในการพกพาของฐานข้อมูลในระหว่างการออกแบบเบื้องต้นและกระบวนการเขียนโค้ด ก็ไม่จำเป็นต้องทำงานเพิ่มเติมใดๆ ในกรณีนี้
1. ปัญหาที่พบเมื่อสภาพแวดล้อมฐานข้อมูลเปลี่ยนจาก Oracle เป็น MySQL
เนื่องจากตรรกะยังคงไม่เปลี่ยนแปลง หลักการจึงไม่ใช่การเปลี่ยนรหัสแอปพลิเคชัน แต่จะเปลี่ยนแปลงเฉพาะการสร้าง/การเริ่มต้น sql ของตารางฐานข้อมูลเท่านั้น ด้านล่างนี้คือปัญหาที่เราพบและแนวทางแก้ไข
1. ความแตกต่างโดยพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (หากระบบปฏิบัติการเซิร์ฟเวอร์เป็น Linux)
โดยทั่วไป Oracle จะไม่คำนึงถึงขนาดตัวพิมพ์ บางครั้งเราไม่ใส่ใจกับปัญหาของตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เมื่อใช้ Oracle ชื่อตารางและชื่อฟิลด์ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ เช่นนี้: แทรกลงใน tableName และแทรกลงใน TABLENAME จะมีผลเช่นเดียวกัน การเริ่มต้นข้อมูล สคริปต์ ผลลัพธ์ที่ได้รับโดยทั่วไปจะถูกแปลงเป็นชื่อตารางตัวพิมพ์ใหญ่และชื่อฟิลด์
แต่ใน MySQL ความละเอียดอ่อนของตัวพิมพ์เล็กและใหญ่ของระบบปฏิบัติการที่ใช้จะกำหนดความไวตัวพิมพ์ใหญ่ของชื่อฐานข้อมูลและชื่อตาราง ฐานข้อมูลสอดคล้องกับไดเร็กทอรีในไดเร็กทอรีข้อมูล และแต่ละตารางในฐานข้อมูลสอดคล้องกับไฟล์อย่างน้อยหนึ่งไฟล์ในไดเร็กทอรีฐานข้อมูล (หรือหลายไฟล์ ขึ้นอยู่กับกลไกการจัดเก็บข้อมูล) ดังนั้นการใช้ฐานข้อมูลหรือตารางจึงเป็นการจัดการไฟล์ (โฟลเดอร์) เหล่านี้ ดังนั้นการพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ของระบบปฏิบัติการจึงกำหนดความไวตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ของชื่อฐานข้อมูลและชื่อตาราง คำนึงถึงขนาดตัวพิมพ์ในระบบปฏิบัติการที่มี Linux เป็นเคอร์เนล
วิธีแก้ไขคือรักษาชื่อฐานข้อมูลของ MySQL ให้สอดคล้องกับกรณีของ Oracle และชื่อตารางให้สอดคล้องกับชื่อตารางในสตริง SQL ในแอปพลิเคชัน หากชื่อฟิลด์ในแอปพลิเคชันใช้เครื่องหมายคำพูดคู่ โปรดเปลี่ยนชื่อฟิลด์ ใน SQL กรณีของชื่อจะต้องสอดคล้องกับอักขระที่อยู่ในเครื่องหมายคำพูดคู่ หากชื่อตารางและฟิลด์ที่แอปพลิเคชันของคุณอ้างอิงไม่มีตัวพิมพ์ที่เหมือนกัน คุณจะประสบปัญหาใหญ่
2. ความแตกต่างระหว่างคำสงวน
ชื่อฟังก์ชันในภาษา SQL (เช่น inteval, show) เป็นคำสงวน คำสงวนใน Oracle สามารถใช้เป็นชื่อตารางและชื่อฟิลด์ได้ และไม่ส่งผลต่อการใช้งาน อย่างไรก็ตาม คำสงวนใน MySQL จะไม่สามารถใช้เป็นชื่อตารางและชื่อฟิลด์ได้ หากใช้ ระบบจะรายงานข้อผิดพลาดทางไวยากรณ์
วิธีแก้ไขคืออ้างคำสงวนในคำสั่ง SQL ด้วยสัญลักษณ์ ``'' ซึ่งอยู่เหนือปุ่มแท็บของแป้นพิมพ์ หากเป็นชื่อฟิลด์ จะมีวิธีอื่นชื่อ tablename.field เช่นนี้: แทรกลงใน tablename (id, `interval`) value(….. หรือ แทรกลงใน tablename (id, tablename.inteval) value(….. .
3. ความแตกต่างในประเภทข้อมูล
ใน mysql ไม่มี varchar2 และตัวเลขเหมือนใน oracle Mysql มี varchar และตัวเลขที่สอดคล้องกัน แน่นอนว่าไม่มีประเภทเวลา mysql ใน oracle
วิธีแก้ปัญหาคือการเปลี่ยน
4. ความแตกต่างระหว่างประเภทการเติบโตอัตโนมัติ
Oracle มีลำดับ แต่ mysql ไม่มี แต่มีแอตทริบิวต์ auto_increation
วิธีแก้ไขคือการแปลงลำดับใน Oracle เพื่อใช้แอตทริบิวต์ auto_increation ในบางกรณี อาจมีวิธีแก้ไขปัญหา สร้างตารางอิสระใหม่เพื่อบันทึกข้อมูลการเติบโตอัตโนมัติ
5. ความแตกต่างในการจำกัดความยาวดัชนี
เริ่มต้นจาก MySQL 4.1.2 ความยาวดัชนีของตาราง MyISAM และ InnoDB รองรับ 1,000 ไบต์ ซึ่งหมายความว่าความยาวของฟิลด์ดัชนีต้องไม่เกิน 1,000 ไบต์ หากเกินนั้น ข้อผิดพลาดต่อไปนี้จะถูกรายงาน: ข้อผิดพลาด 1071 (42000): คีย์ที่ระบุยาวเกินไป ความยาวคีย์สูงสุดคือ 1,000 ไบต์ หากเป็นการเข้ารหัส UTF-8 จะมีความยาวเท่ากับ 333 อักขระ (เนื่องจากอักขระ UTF8 หนึ่งตัวใช้พื้นที่ 3 ไบต์) ขีดจำกัดความยาวดัชนีของ Oracle นั้นหลวมกว่าของ MySQL มาก
ไม่จำเป็นต้องอธิบายรายละเอียดเกี่ยวกับโซลูชัน เปลี่ยนคำจำกัดความของดัชนี หรือเปลี่ยนความยาวคำจำกัดความของฟิลด์
2. เราควรคำนึงถึงอะไรบ้างสำหรับความเข้ากันได้ของฐานข้อมูล?
ความเข้ากันได้ของฐานข้อมูลควรเป็นปัญหาที่ควรคำนึงถึงในการออกแบบฐานข้อมูล เนื่องจากบางครั้งลูกค้ามีฐานข้อมูลที่ใช้งานอยู่แล้วและไม่ต้องการรักษาฐานข้อมูลสองรายการพร้อมกัน ในกรณีนี้ ความเข้ากันได้กับหลายฐานข้อมูลก็อาจกลายเป็นได้ จุดขายของผลิตภัณฑ์
กุญแจสำคัญในการบรรลุความเข้ากันได้ของฐานข้อมูลคือการปฏิบัติตามการใช้งานมาตรฐาน
1. ปฏิบัติตามการใช้งานมาตรฐานและพยายามอย่าใช้การใช้งานเฉพาะฐานข้อมูลบางอย่าง
เช่นการใช้สัญลักษณ์ '''' ของ msyql
อีกตัวอย่างหนึ่ง หลายคนมีการใช้งานนี้ เมื่อใช้ Oracle เพื่อสร้างลำดับ ให้เลือก seq.nextval จาก DUAL ก่อนที่จะแทรกข้อมูลลงในตาราง จากนั้นจึงแทรกค่าที่ได้รับจากการสืบค้นลงในตารางเป็นค่านี้ ใช้งานไม่ได้ ไม่เหมาะกับฐานข้อมูลที่ไม่มีลำดับ
อีกตัวอย่างหนึ่ง ฐานข้อมูลที่แตกต่างกันได้ขยายการสืบค้นเพจ Postgresql มีออฟเซ็ตและขีดจำกัด แต่ Oracle ไม่มี
2. หลีกเลี่ยงปัญหาความอ่อนไหวของตัวพิมพ์ฐานข้อมูล
เลือกว่าชื่อตารางฐานข้อมูลและชื่อฟิลด์ควรเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก และรวมเป็นหนึ่งเดียวในระหว่างการออกแบบและการเข้ารหัสฐานข้อมูล
3. คำสงวน
ผู้ออกแบบฐานข้อมูลจะต้องพยายามไม่ใช้คำสงวนสำหรับชื่อตารางและชื่อเขตข้อมูล นอกจากนี้ยังมีคนจำนวนมากที่ใช้วิธีนี้ โดยเติม '_' หน้าชื่อตารางและชื่อฟิลด์ เช่น สร้างตาราง _tablename (_id integer) วิธีนี้จะทำให้คุณไม่มีปัญหาที่เกิดจากคำสงวน