執行建表語句時遇到 You have an error in your SQL syntax ... near 'type=InnoDB',是因為較新 MySQL 版本已移除 TYPE 關鍵字,統一使用 ENGINE。本文提供快速修復方案與版本演進背景。
mysql> CREATE TABLE t (id INT) TYPE=InnoDB;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=InnoDB' at line 1
TYPE 是 MySQL 早期版本(4.1 前)指定儲存引擎的關鍵字ENGINE 作為替代TYPE 支援,僅認 ENGINETYPE=InnoDB| 錯誤寫法 | 正確寫法 |
|---|---|
CREATE TABLE t (id INT) TYPE=InnoDB; | CREATE TABLE t (id INT) ENGINE=InnoDB; |
ALTER TABLE t TYPE=MyISAM; | ALTER TABLE t ENGINE=MyISAM; |
批量修復腳本(Linux):
# 修正單個 SQL 檔 sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' backup.sql sed -i 's/TYPE=MyISAM/ENGINE=MyISAM/g' backup.sql # 遞迴修正目錄下所有 .sql find /path/to/sql -name "*.sql" -exec sed -i 's/TYPE=/ENGINE=/g' {} \;
| MySQL 版本 | TYPE 支援 | ENGINE 支援 | 建議 |
|---|---|---|---|
| 4.0.x | ✅ 唯一支援 | ❌ | 必須用 TYPE |
| 4.1 - 5.1 | ✅ 支援 | ✅ 支援 | 建議遷移至 ENGINE |
| 5.5 - 5.7 | ⚠️ 棄用警告 | ✅ 標準 | 必須用 ENGINE |
| 8.0+ | ❌ 完全移除 | ✅ 唯一標準 | 僅能用 ENGINE |
ENGINE 可簡寫為 ENGINE=InnoDB 或 ENGINE = InnoDB(空格不影響)SHOW ENGINES;SHOW TABLE STATUS LIKE 't'; 或 SHOW CREATE TABLE t;ALTER TABLE t ENGINE=InnoDB;(會重建表,大表慎用)一句話總結:所有
TYPE=引擎名直接改為ENGINE=引擎名即可解決。此為 MySQL 5.5+ 強制標準化的結果,屬語法層面破壞性變更,無業務邏輯影響,批量替換極低風險。