[轉帖]【MySQL】字段名與關鍵字衝突解決辦法

https://www.jianshu.com/p/50e59feb3e83

 

  首先,不推薦使用MySQL的關鍵詞來作爲字段名,但是有時候的確沒有注意,或者因爲之前就這麼寫了,沒辦法,那怎麼辦呢?

  • 方法1,改字段名,改了肯定就沒問題了。這個就不細說了。
  • 方法2,使用引號`來處理。

  下面就詳細的說明一下怎樣使用方法2來處理。

1. 創建測試表

CREATE TABLE `test` (
  `maxvalue` int(10) DEFAULT NULL,
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  上面的測試表是MySQL自動生成的DDL,其實從上面就可以看出,MySQL的引號內是說明絕對的保證大小寫和當做普通字符串處理。
  這裏使用了maxvalue這個不常用的關鍵詞作爲字段名,一樣違反了通常常規的命名規則,MySQL無法很好的識別。


 
Test表結構

2. 錯誤問題現象重現

  查詢SQL:

SELECT t.id, t.maxvalue FROM test t
 
SELECT查詢結果

  在navicat中可以正常執行,沒有任何問題。
  然後再運行insert語句:

INSERT INTO test(maxvalue, id) VALUES (10, 1);

  提示下面的錯誤:

INSERT INTO test(maxvalue, id) VALUES (10, 1)
> 1064 - 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 'maxvalue, id) VALUES (10, 1)' at line 1
> 時間: 0.02s

  提示錯誤,但是沒有明顯的說明是關鍵詞不能識別。


 
使用非法關鍵詞的錯誤

3. SQL語句中的解決辦法

  增加引號,使用MySQL的引號“`”,記住不是普通的英文單引號“'”,是傾斜的上撇,不是豎直的上撇。
  鍵盤輸入方式爲鍵盤英文字母鍵上面的數字鍵1最前面的那個波浪線和頓號組成的鍵。也就是ESC下面,TAB鍵上面的按鍵。

INSERT INTO test(`maxvalue`, id) VALUES (10, 1);
 
修改後可以正常執行的測試結果

  這樣就可以正常運行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章