本文整理社區經典「MySQL 遷移 Oracle 前需知 50 件事」,按語法、數據類型、管理操作、性能調優、工具生態五大維度分類解析,助您規避遷移坑點,平滑落地。
LIMIT,用 ROWNUM 三層嵌套或 12c+ OFFSET/FETCH。OFFSET 關鍵字(12c 前)。INSERT ... ON DUPLICATE KEY UPDATE → Oracle MERGE(標準 SQL)。GROUP BY:Oracle 嚴格要求 SELECT 列必須出現在 GROUP BY 或聚合函數中(MySQL 允許非聚合列)。ORDER BY:Oracle 不支持 ORDER BY -col 降序簡寫,需 DESC。CONCAT() / ||(需設置),Oracle 僅 ||。DATE '2023-01-01',MySQL '2023-01-01' 隱式轉換。GROUP_CONCAT → Oracle 11g+ LISTAGG、自定義聚合或 XMLAGG。COUNT(DISTINCT col1, col2):MySQL 支持多列,Oracle 僅單列,需子查詢或拼接實現。AUTO_INCREMENT → Oracle SEQUENCE + TRIGGER 或 12c IDENTITY 列。NUMBER(p,s),MySQL 多粒度(TINYINT/INT/BIGINT/DECIMAL),需按精度映射。ENUM:Oracle 無,用 CHECK (col IN (...)) 或查找表外鍵。DATE 含時間(精度秒),12c+ TIMESTAMP 支持微秒;MySQL 分離 DATE/TIME/DATETIME。BLOB/TEXT → Oracle BLOB/CLOB,操作需 DBMS_LOB,非透明讀寫,效率較低。ALTER TABLE ADD COLUMN BEFORE/AFTER:Oracle 不支持指定列位置,僅末尾添加。GLOBAL TEMPORARY TABLE),MySQL 定義與數據均會話級。ROLE 與 SCHEMA 綁定,無 MySQL root 超級用戶概念,使用 SYS/SYSTEM 高權限賬號。ORA-01000,應用層必須顯式關閉。ORA-01555,調整 Undo 保留/大小或優化 SQL。ALTER SYSTEM KILL SESSION 'sid,serial#'(非 OS kill)。EXP 生成二進制 .dmp 不可手工修改,MySQL mysqldump 為文本可編輯。DBMS_STATS)。/*+ */),可干預連接順序/方法/訪問路徑。PARALLEL 成熟,MySQL 8.0 才開始支持並行查詢。RESULT_CACHE,MySQL 8.0 才有查詢緩存(已廢棄)。SQL*Plus 簡陋,推薦 SQL Developer / PL/SQL Developer / DBeaver / DataGrip。LIMIT→FETCH、AUTO_INCREMENT→SEQUENCE 等。MySQL 到 Oracle 不是簡單的「換引擎」,而是架構、思維、工具鏈的系統性重構。吃透這 50 點差異,是成功遷移的必要條件。