Mysql

從 MySQL 5.x 遷移到 8.x - 由於名為“over”的列而失敗

  • February 7, 2022

有趣和令人沮喪的一個,這個。我們有一個舊數據庫,它仍然通過多個帶有 VBA 的 Excel 文件非常活躍地使用,包括帶有此類文件的存檔項目。

有一些程式碼可以做到這一點:

從 myTable 中選擇值 where someIndex = 1 AND over < 3.2

這在 5.x 上完美執行,因為我們的表有一個名為“over”的列,其中包含合適的值。

但是,它在 8.x 上失敗了,因為為視窗添加了一個名為“OVER”的新關鍵字。所以很明顯它現在是無效的語法,以前不是。

有什麼方法可以禁用特定數據庫的視窗關鍵字?我意識到我可以更改 VBA 腳本以將“over”放在引號中,但由於我們大多數存檔項目的 Excel 文件都是只讀的,所以這不是一個選項。

任何不涉及更改 Excel VBA 的建議將不勝感激!否則我們會被 5.x 卡住,無法遷移到 8.x。

謝謝理查德

over現在是關鍵字——從 MySQL 8.0 開始。(還有其他幾個“新”關鍵字會導致語法錯誤。)8.1(某年)可能會引入更多新關鍵字。

為避免將來出現這種情況,請在每個列名和表名周圍加上反引號 (`)。

無法禁用 MySQL 中的某些關鍵字或內置函式。

您必須更改 MySQL 本身的原始碼並建構自定義版本。沒有關於如何執行此操作的指導,因為它不是 MySQL 的典型支持用法。你必須學習很多關於 MySQL 程式碼內部的知識才能做到這一點。而且您最終會為自己進行持續的維護任務,如果您想再次升級 MySQL,則必須對每個未來版本應用相同的更新檔。

我認為您會發現,即使您必須從頭開始重寫它們,在您的 VBA 程式碼中的 SQL 查詢中的工作定界標識符也會更少。

引用自:https://dba.stackexchange.com/questions/303110