首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Oracle 遷移 MySQL 完整指南:語法差異、資料類型對照與相容性設計

     編輯:MySQL 綜合教學

Oracle 到 MySQL 遷移:核心差異與解決方案

企業將既有 Oracle 系統遷移至 MySQL 可大幅降低授權成本,但需處理語法、資料類型、函數、PL/SQL 等多重差異。本文整理遷移關鍵點與相容性設計原則。

一、大小寫敏感度 (Linux 環境關鍵)

項目OracleMySQL (Linux)解決方案
表名/欄位名不敏感 (內部轉大寫)敏感 (檔案系統決定)統一採用小寫 + 底線命名法,lower_case_table_names=1 強制不敏感

二、保留字衝突

  • Oracle 允許保留字作識別符 (如 INTERVAL、SHOW)
  • MySQL 需用反引號包裹:\`interval\` 或 table.\`interval\`
  • 建議:遷移前掃描所有識別符,自動加反引號或改名

三、資料類型對照表

OracleMySQL 對應備註
VARCHAR2(n)VARCHAR(n) / VARCHAR(n CHAR)MySQL 5.0+ VARCHAR 65535 位元組
NUMBER(p,s)DECIMAL(p,s) / NUMERIC(p,s)精確數值,儲存空間較大
NUMBERDOUBLE / DECIMAL(38,10)視精度需求選擇
DATEDATETIME / TIMESTAMPOracle DATE 含時分秒
TIMESTAMPTIMESTAMP(6)微秒精度
CLOBLONGTEXT / MEDIUMTEXT64KB / 16MB / 4GB
BLOBLONGBLOB
RAWVARBINARY / BLOB
ROWID無直接對應用 PRIMARY KEY 替代

四、自動遞增機制

OracleMySQL
SEQUENCE 物件AUTO_INCREMENT 欄位屬性
獨立管理、可跨表、CYCLE/CACHE綁定單表、單調遞增、重啟不重置 (8.0+ 持久化)

遷移策略:

  1. 單表主鍵 → 直接改 AUTO_INCREMENT
  2. 跨表共用 Sequence → 建立專用序列表 CREATE TABLE seq_table (id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(64)); 搭配 LAST_INSERT_ID()

五、索引長度限制

  • MySQL 4.1.2+:MyISAM/InnoDB 單索引 ≤ 1000 位元組 (InnoDB 可調 innodb_large_prefix)
  • UTF8MB4:每字元 4 位元組 → 最大 255 字元
  • Oracle 限制較寬鬆 (約 32 字元 * 區塊大小)
  • 解決:縮短索引欄位、使用前綴索引 INDEX idx_name (col(191))、升級 MySQL 5.7+ 支援 3072 位元組

六、分頁查詢語法

-- Oracle 12c+
SELECT * FROM t ORDER BY id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

-- MySQL / PostgreSQL
SELECT * FROM t ORDER BY id LIMIT 10 OFFSET 20;
-- 或
SELECT * FROM t ORDER BY id LIMIT 20, 10;

七、函數與語法差異精選

功能OracleMySQL
字串連接\|\| 或 CONCATCONCAT() 或 \|\| (需 PIPES_AS_CONCAT SQL_MODE)
空值處理NVL(a,b), COALESCEIFNULL(a,b), COALESCE
日期加減SYSDATE + 1DATE_ADD(NOW(), INTERVAL 1 DAY)
截取子字串SUBSTR(str, pos, len)SUBSTRING(str, pos, len)
轉換字元集CONVERTCONVERT(str USING utf8mb4)
合併插入MERGE INTOINSERT ... ON DUPLICATE KEY UPDATE
階層查詢CONNECT BY PRIORWITH RECURSIVE CTE (8.0+)

八、相容性設計原則 (新專案適用)

  1. 遵循 ANSI SQL 標準: 避免廠商專屬語法
  2. 統一命名規範: 全小寫 + 底線,避免保留字
  3. 抽象資料存取層: 使用 ORM (Hibernate、MyBatis、Entity Framework) 或自建 DAL
  4. 分頁統一介面: 應用層封裝 PageRequest,底層適配不同方言
  5. 測試驗證: CI/CD 管線同時跑 Oracle/MySQL 整合測試

遷移非一日之功,建議採用「雙寫驗證 → 灰度切換 → 全量切換」策略,並保留回滾方案。工具推薦:ora2pg、MySQL Workbench Migration Wizard、AWS SCT。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved