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

MySQL 欄位名/表名與保留字衝突解決:反引號 ` ` 完整用法指南

     編輯:MySQL 資料庫相關知識

MySQL 允許使用反引號 (backtick, `) 包裹標識符 (資料庫名、表名、欄位名、別名),解決與保留字衝突、包含特殊字元、大小寫敏感等問題。本文系統說明用法、常見場景、遷移注意事項。

核心語法

-- 錯誤:from 是保留字
SELECT from FROM table;  -- ERROR 1064

-- 正確:反引號包裹
SELECT `from` FROM `table`;

適用範圍

對象範例說明
資料庫名CREATE DATABASE \`order\`;ORDER 為保留字
表名SELECT * FROM \`group\`;GROUP 為保留字
欄位名SELECT \`select\`, \`where\` FROM t;查詢關鍵字作欄位名
別名SELECT id AS \`order\` FROM t;結果集別名含保留字
索引名CREATE INDEX \`key\` ON t(col);
視圖名CREATE VIEW \`select\` AS ...

常見保留字列表 (部分)

SELECT, INSERT, UPDATE, DELETE, WHERE, FROM, GROUP, ORDER, BY, 
HAVING, LIMIT, JOIN, LEFT, RIGHT, INNER, OUTER, ON, AS, 
INDEX, KEY, PRIMARY, UNIQUE, FOREIGN, REFERENCES, CHECK,
TABLE, DATABASE, VIEW, TRIGGER, PROCEDURE, FUNCTION,
DESC, ASC, DISTINCT, EXISTS, IN, LIKE, BETWEEN, IS, NULL,
AND, OR, NOT, XOR, TRUE, FALSE, DEFAULT, VALUES, SET,
CURRENT_TIMESTAMP, NOW, DATE, TIME, TIMESTAMP, DATETIME,
INT, BIGINT, VARCHAR, CHAR, TEXT, BLOB, JSON, ENUM, SET

完整列表請參考官方文檔:https://dev.mysql.com/doc/refman/8.0/en/keywords.html

反引號 vs 單引號 vs 雙引號

符號名稱用途範例
`反引號 / Backtick標識符包裹 (識別符)SELECT \`name\` FROM \`user\`;
'單引號字串字面值WHERE name = 'John'
"雙引號字串字面值 (ANSI_QUOTES 模式下為標識符)WHERE name = "John"

關鍵差異: 單/雙引號包裹的是「值」,反引號包裹的是「名稱」。

ANSI_QUOTES SQL 模式影響

-- 啟用後,雙引號變為標識符包裹,字串必須用單引號
SET SESSION sql_mode = 'ANSI_QUOTES';

SELECT "name" FROM "user";  -- 正確:雙引號作標識符
SELECT 'name' FROM 'user';  -- 錯誤:單引號字串不可作表名
-- 字串必須用單引號
WHERE name = 'John';

建議不啟用 ANSI_QUOTES,統一使用反引號包裹標識符,單引號包裹字串,避免混淆。

工具自動生成

  • MySQL Workbench:匯出 SQL 時自動加反引號
  • mysqldump:--quote-names (預設開啟) 自動包裹
  • ORM 框架:Hibernate、MyBatis、Entity Framework 等通常自動處理

遷移與相容性

  1. SQL Server:使用方括號 [column] 或雙引號 (QUOTED_IDENTIFIER ON)
  2. PostgreSQL:雙引號 "column" (區分大小寫)
  3. Oracle:雙引號 "COLUMN" (區分大小寫)
  4. 跨庫遷移工具:需處理引號轉換,建議統一不使用保留字命名

最佳實踐

  1. 命名規範:避免使用保留字作名稱,採用 user_from, order_date 等描述性命名
  2. 統一包裹:即使非保留字,建議全域使用反引號,防止未來版本新增保留字導致遷移報錯
  3. 代碼審查:檢查 SQL 中所有標識符是否正確包裹
  4. 關鍵字檢測:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME IN (保留字列表)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved