原則:業務邏輯層代碼保持不動,僅調整資料庫物件建立/初始化 SQL。以下為實戰中高頻踩坑點與對策。
Oracle:預設不區分大小寫,tablename、TABLENAME 等同;匯出腳本常轉為大寫。
MySQL:依賴作業系統檔案系統特性。Linux 區分大小寫,資料庫/表名對應目錄/檔案名,故嚴格區分大小寫。
Oracle 允許保留字(如 INTERVAL、SHOW)作為表/欄位名。
MySQL 直接報語法錯誤。
` 包裹保留字:INSERT INTO t (id, `interval`) VALUES (...)。INSERT INTO t (id, t.interval) VALUES (...)。| Oracle | MySQL 對應 | 備註 |
|---|---|---|
| VARCHAR2 | VARCHAR | 長度語義一致 |
| NUMBER | NUMERIC / DECIMAL | 精度/標度需對應 |
| DATE | DATETIME / TIMESTAMP | Oracle DATE 含時間;MySQL 無純 TIME 類型對應 |
| CLOB/BLOB | TEXT / BLOB | 長文本/二進制 |
原則:逐一替換,注意精度與儲存上限差異。
Oracle:使用 SEQUENCE + TRIGGER 實現。
MySQL:原生支援 AUTO_INCREMENT 欄位屬性。
SEQUENCE 改為 AUTO_INCREMENT 主鍵欄位。MyISAM/InnoDB 單一索引鍵長度上限 1000 bytes。UTF-8 編碼下每字元 3 bytes,實際約 333 字元。Oracle 限制寬鬆得多。
VARCHAR(255) → VARCHAR(100))。INDEX idx_name (col(50))。utf8mb4 需更謹慎規劃(每字元 4 bytes)。遷移核心在於細節對齊:大小寫規範、保留字轉義、類型映射、自增重構、索引長度預檢。建議建立標準化遷移清單,配合自動化腳本驗證,方能平穩落地。