Mysql

OVHCloud MySQL 伺服器上的儲存過程因“欄位列表”中的“未知列”而失敗

  • January 12, 2022

我在這裡使用 jaro winkler 儲存過程:https ://gist.github.com/TheHiddenHaku/7229861 。這在我的本地 MySQL 伺服器(版本 8.0.19)上執行良好,但是當嘗試在 OVHCloud MySQL 伺服器(版本 8.0.26)上使用相同的功能時,它失敗並出現錯誤Unknown column '' in 'field list'

我正在測試各種語句:

select jws('test','test1')
select jws("test","test1")
select jws(myColumn, 'test1') from myTable;

並且所有查詢都會導致相同的錯誤。

您的伺服器似乎正在使用sql_mode=''. OVHCloud MySQL 伺服器有 sql_mode ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,STRICT_ALL_TABLES

ANSI 啟動 ANSI_QUOTES 模式,該模式將雙引號 ( ") 解釋為欄位名稱。您的 jaro winkler 儲存過程使用雙引號來定義字元串 string=“value”(l.16、17 和 38)。

沒有ANSI_QUOTES,MySQL 讀取:變數字元串等於值。

使用ANSI_QUOTES,MySQL 讀取:變數字元串等於名為“值”的欄位的值。

您需要更新儲存過程以使用單引號 ( ') 進行字元串定義。

...
set common1='';
set common2='';
...
set in2 = concat(substr(in2,1,curSub-1),concat('0',substr(in2,curSub+1,length(in2)-curSub+1)));

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