MySQL 為了易用性與效能,引入大量非標準語法。開發可移植應用時,請善用條件註釋 /*! ... */ 或版本註釋 /*!32302 ... */ 封裝專有語法,其他資料庫會忽略。
TINYINT、SMALLINT、MEDIUMINT、BIGINT(標準僅 SMALLINT、INTEGER、BIGINT)。SET、ENUM、多種 BLOB/TEXT 亞型(TINYBLOB、MEDIUMBLOB、LONGBLOB)。AUTO_INCREMENT、UNSIGNED、ZEROFILL、BINARY。latin1_swedish_ci),標準要求區分大小寫。BINARY 屬性或使用 COLLATE utf8mb4_bin。" 包裹字串(ANSI 模式下雙引號為識別符引號)。` 為 MySQL 專屬識別符引號。| 功能 | MySQL 語法 | 標準/其他資料庫 |
|---|---|---|
| 備份/匯出 | SELECT ... INTO OUTFILE | 標準無,Oracle 用 UTL_FILE、PostgreSQL 用 COPY TO |
| 聯結控制 | STRAIGHT_JOIN、SQL_SMALL_RESULT | 標準無 Hint 機制 |
| 執行計劃 | EXPLAIN SELECT | 標準無,各資料庫自有命令 |
| 建表選項 | TEMPORARY、IF NOT EXISTS、INDEX/KEY 列內建、前綴索引 | 部分標準支援 TEMPORARY |
| 聚合函數 | COUNT(DISTINCT col1, col2) 多列去重 | 標準僅單列 |
| ALTER TABLE | 多 ADD/DROP/CHANGE 子句合併、IGNORE 忽略重複鍵錯誤 | 標準單子句 |
| 刪除限制 | DELETE ... LIMIT n | 標準無 LIMIT |
| 插入變體 | INSERT DELAYED、LOW_PRIORITY、REPLACE、INSERT IGNORE | 標準 MERGE (UPSERT) |
| 載入資料 | LOAD DATA INFILE | Oracle 相容,SQL Server 用 BULK INSERT |
| 維護命令 | OPTIMIZE TABLE、ANALYZE TABLE、CHECK TABLE、REPAIR TABLE | 各資料庫自有工具 |
| 資訊查詢 | SHOW DATABASES/TABLES/COLUMNS/INDEX/STATUS/VARIABLES/PROCESSLIST/GRANTS/ENGINES/ERRORS/WARNINGS | 標準查詢 INFORMATION_SCHEMA |
| 變數賦值 | SELECT @a:=1, @b:=@a+2、SET @var=value | 標準無使用者變數 |
| 運算子 | || 為邏輯 OR(非字串連接)、&& 為 AND、<=> 安全等於(NULL 安全) | 標準 || 字串連接,IS NOT DISTINCT FROM |
| 函數庫 | MD5()、PASSWORD()、ENCRYPT()、ENCODE/DECODE、AES_ENCRYPT/DECRYPT、BIT_COUNT、IF()、IFNULL()、COALESCE()、GREATEST/LEAST、PERIOD_ADD/DIFF、TRIM() 多字元修剪、STD/BIT_OR/BIT_AND 聚合 | 各資料庫函數差異極大 |
啟動參數 --ansi 或 SET sql_mode='ANSI' 會改變:
|| 變為字串連接(標準行為)。" 變為識別符引號(同 `)。REAL 同義 FLOAT(預設同義 DOUBLE)。-- 註釋需後接空白字元(標準不要求)。VARCHAR 儲存時截斷尾部空格(標準保留)。CHAR 隱式轉為 VARCHAR(特定條件下)。DROP TABLE 不自動撤銷該表權限,需顯式 REVOKE。CHECK 約束(8.0.16+ 支援)、FULL OUTER JOIN、MERGE、窗口函數(8.0+ 支援)、共用資料表運算式 WITH(8.0+ 支援)。mysqldump --compatible=postgresql|oracle|mssql 產生相容腳本。