首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 與 MySQL 核心差異對比:聚合函數、自增、引號、分頁、日期、空值、模糊查詢 7 大陷阱

     編輯:Oracle 資料庫相關知識

異構資料庫遷移或雙資料庫支援專案中,Oracle 與 MySQL 的語法與語義差異是 Bug 溫床。本文梳理 7 大核心差異類別,附對比表與遷移建議,助開發者寫出可移植 SQL 或快速定位遷移問題。

一、聚合函數與 GROUP BY 語義

二、自增主鍵實現

場景MySQLOracle遷移對策
SELECT 含聚合函數與非聚合欄位允許 (ONLY_FULL_GROUP_BY 關閉時),任意取值報錯 ORA-00979,非聚合欄位必須在 GROUP BY 中嚴格遵循 ANSI SQL:所有非聚合欄位納入 GROUP BY 或包裹聚合函數
特性MySQLOracle
語法AUTO_INCREMENTSequence + Trigger / Identity Column (12c+)
插入行為自動填充,無需指定需 .NEXTVAL 或 DEFAULT ON NULL
遷移建議Oracle 12c+ 使用 GENERATED AS IDENTITY;舊版建立 Sequence + BEFORE INSERT Trigger

三、字串引號規範

  • MySQL:支援雙引號 "string" (預設 ANSI_QUOTES 關閉)
  • Oracle:僅支援單引號'string',雙引號用於識別符 (大小寫敏感表名/欄位名)
  • 遷移:統一使用單引號,識別符雙引號僅在需保留大小寫時使用

四、分頁查詢語法

資料庫語法範例 (第 2 頁,每頁 10 筆)
MySQLLIMIT offset, countSELECT * FROM t LIMIT 10, 10
Oracle (12c-)ROWNUM 雙層嵌套SELECT * FROM (SELECT t.*, ROWNUM rn FROM t) WHERE rn BETWEEN 11 AND 20
Oracle (12c+)OFFSET ... FETCHSELECT * FROM t OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY

五、日期時間型別與函數

特性MySQLOracle
型別DATE (僅日期)、DATETIME/TIMESTAMP (日期時間)單一 DATE 含日期時間 (秒精度),TIMESTAMP 含時區/微秒
當前時間NOW(), SYSDATE()SYSDATE (Session 時區), SYSTIMESTAMP (微秒+時區)
字串轉日期STR_TO_DATE('2001-08-01','%Y-%m-%d')TO_DATE('2001-08-01','YYYY-MM-DD')

六、空值與空字串語義

場景MySQLOracle遷移風險
NOT NULL 欄位插入 ''允許 (空字串 ≠ NULL)報錯 ORA-01400 (空字串視同 NULL)MySQL 導出資料含空字串,Oracle 匯入失敗
對策ETL 階段將 '' 轉為 ' ' (單空格) 或預設值

七、模糊查詢效能差異

  • 語法相同:col LIKE '%keyword%'
  • MySQL:無函數替代,依賴全文索引
  • Oracle:INSTR(col, 'keyword') > 0 可利用索引 (函數索引),效能優於 LIKE 導頭萬用字元
  • 建議:Oracle 偏好 INSTR 或 CTXSYS.CONTEXT 全文索引

八、遷移檢查清單

[ ] 聚合查詢 GROUP BY 完整性
[ ] 自增主鍵 → Sequence/Identity
[ ] 雙引號字串 → 單引號
[ ] LIMIT → ROWNUM/OFFSET FETCH
[ ] NOW()/STR_TO_DATE → SYSDATE/TO_DATE
[ ] 空字串 '' → ' ' 或預設值
[ ] LIKE '%...%' → INSTR() > 0
[ ] 數據類型映射 (TINYINT→NUMBER(3), MEDIUMTEXT→CLOB 等)
[ ] 鎖提示 (NOLOCK/UPDLOCK → FOR UPDATE/ISOLATION LEVEL)
[ ] 儲存過程/觸發器語法重寫 (PL/SQL vs MySQL Stored Program)

系統性對比差異,建立遷移規範與自動化改寫腳本,是異構資料庫專案成功的關鍵。

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