| # | 差異項目 | Oracle 行為 | MySQL 行為 | 解決方案 |
| 1 | 大小寫敏感度 |
預設不區分 (表名/欄名轉大寫) |
取決於 OS 與 lower_case_table_names 參數。Linux 預設區分大小寫 |
統一採用 小寫 表名/欄名;建表時加反引號 `table_name`;設定 lower_case_table_names=1 (需重啟) |
| 2 | 保留字衝突 |
允許保留字作物件名 (需雙引號) |
嚴格禁止,直接報語法錯誤 |
避免使用保留字;必須用時以反引號包裹 `interval` 或 schema.`interval` |
| 3 | 資料型別對應 |
VARCHAR2, NUMBER, DATE (含時間) |
VARCHAR, DECIMAL/NUMERIC, DATETIME/TIMESTAMP, TIME |
建立型別對照表;NUMBER(p,s) → DECIMAL(p,s);DATE → DATETIME;注意 TIME 僅時間部分 |
| 4 | 自動遞增機制 |
SEQUENCE + Trigger |
AUTO_INCREMENT 欄位屬性 |
改用 AUTO_INCREMENT;複雜邏輯可建立單獨序列表模擬 SEQUENCE |
| 5 | 索引長度限制 |
較寬鬆 (視區塊大小而定,通常 > 3000 bytes) |
InnoDB/MyISAM 單欄 767 bytes (預設),啟用 innodb_large_prefix 後 3072 bytes;UTF8MB4 每字 4 bytes → 最長 191/768 字元 |
縮減索引欄位長度;改用前綴索引 INDEX idx_name (col(191));或升級 MySQL 5.7+ 並啟用 large_prefix |