兩大主流關聯式資料庫雖同支援 ANSI SQL,但在型別系統、語法細節、管理工具、效能特性上有顯著差異。以下整理 25 項關鍵差異與分頁實作對比,助跨平台開發避坑。
| 項目 | MySQL | SQL Server |
|---|---|---|
| ENUM/SET 型別 | 支援 | 不支援 |
| NCHAR/NVARCHAR/NTEXT | 不支援(用 CHARSET utf8mb4) | 支援 Unicode 型別 |
| 自增語法 | AUTO_INCREMENT | IDENTITY(1,1) |
| 預設值語法 | 不允許雙層括號 ((0)) | 預設 ((0)) |
| 儲存引擎 | 建表須指定(InnoDB/MyISAM/等) | 單一儲存引擎 |
| 識別符號 | 反引號 ` | 方括號 [] |
| 取得目前時間 | NOW()/CURDATE() | GETDATE() |
| REPLACE INTO | 支援 | 2008+ 用 MERGE |
| INSERT SET 語法 | 支援 INSERT INTO t SET c=v | 不支援 |
| 多值 INSERT | VALUES (1,1),(2,2)... | 2008+ 支援 |
| 分頁語法 | LIMIT offset, rows | OFFSET ... ROWS FETCH NEXT ... (2012+) 或 ROW_NUMBER() |
| DATETIME 預設值 | 不支援 DEFAULT NOW(),用 TIMESTAMP | 支援 DEFAULT GETDATE() |
| 刪除表判斷 | DROP TABLE IF EXISTS t | IF OBJECT_ID('t','U') IS NOT NULL DROP TABLE t |
| 無號整數 | 支援 UNSIGNED,容量翻倍 | 不支援 |
| 大物件型別 | BLOB/TEXT 分級 | VARCHAR(MAX) 統一 |
| 建立索引 | KEY idx (a,b) | CREATE INDEX idx ON t(a,b) |
| TEXT 預設值 | 不允許 | 允許 |
| 單表欄位總長 | 65535 bytes | 8060 bytes (行溢出機制) |
| 安裝體積 | ~23 MB (5.5) | 數 GB |
| 管理工具 | MySQL Workbench、phpMyAdmin | SSMS(功能最完整) |
| 預存程序 | 較新版本支援,穩定性待觀察 | 成熟、效能佳 |
| 資源佔用 | CPU/記憶體較低 | 較高 |
| PHP 連線 | mysqli/PDO | sqlsrv/PDO,函式名稱相似 |
| DATE/TIME 型別 | 支援 DATE/TIME/YEAR | 2008 前只有 DATETIME |
-- 前 10 筆
SELECT * FROM t LIMIT 10;
-- 第 3 頁,每頁 10 筆
SELECT * FROM t LIMIT 20, 10;
-- 前 10 筆
SELECT TOP 10 * FROM t;
-- 第 3 頁,每頁 10 筆 (2012+)
SELECT * FROM t ORDER BY id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
-- 2008/2005 相容寫法
SELECT TOP 10 * FROM t
WHERE id NOT IN (SELECT TOP 20 id FROM t ORDER BY id)
ORDER BY id;
MySQL Workbench Migration Wizard、SQL Server Migration Assistant (SSMA)。理解差異本質,才能在異構環境中寫出可移植、高效能的 SQL。