簡體   English   中英

從 Mysql 5.7 遷移到 MariaDb 10.6.5 后出錯

[英]Error after migrating from Mysql 5.7 to MariaDb 10.6.5

我正在使用PHP-MySQLi-Database-Class來構建查詢,它在 MySQL 上運行良好,但在切換到 MariaDB 數據庫后,特定的單個查詢會拋出此錯誤:(抱歉,文本很長)

*未捕獲的異常:您的 SQL 語法有錯誤; 檢查與您的 MariaDB 服務器版本對應的手冊,了解在“JSON”附近使用的正確語法 FROM attributes AS _sub_attr WHERE JSON_EXTRACT(sub_prop_attr.attrib_te...' 在第 1 行查詢:SELECT ,p.id AS id, DATEDIFF(CURDATE (),DATE(p.created)) AS 天數, COALESCE(bed_room,bath_room,parking,construction_size,lot_size,floors,building_age) AS chs, (SELECT JSON_OBJECTAGG(attribute_name, (SELECT CAST(CONCAT('[',GROUP_CONCAT( JSON_QUOTE(_sub_attr.attribute_name)),']') AS JSON) FROM attributes AS _sub_attr WHERE JSON_EXTRACT(sub_prop_attr.attrib_terms, JSON_UNQUOTE(JSON_SEARCH(sub_prop_attr.attrib_terms, 'one', _sub_attr.id))) IS NOT NULL)) FROM prop_attributes AS sub_prop_attr LEFT JOIN 屬性 AS sub_attr ON sub_prop_attr.attribute_id = sub_attr.id WHERE prop_id = p.id) AS JSON_attributes FROM properties p LEFT JOIN (SELECT id, state_name, CONCAT("en ",state_name) AS state_alias FROM states) s on p.state=s.id LEFT JOIN (SELECT id, city_na in C:\wamp64.. .\classes\MysqliDb.php 第 1819 行

...這是查詢:

SELECT *,p.id AS id, DATEDIFF(CURDATE(),DATE(p.created)) AS days, 
    COALESCE(bed_room,bath_room,parking,construction_size,lot_size,floors,building_age) AS chs ,
    (SELECT JSON_OBJECTAGG(attribute_name, 
        (SELECT CAST(CONCAT(\'[\',GROUP_CONCAT(JSON_QUOTE(_sub_attr.attribute_name)),\']\') AS JSON) 
        FROM attributes AS _sub_attr 
        WHERE JSON_EXTRACT(sub_prop_attr.attrib_terms, JSON_UNQUOTE(JSON_SEARCH(sub_prop_attr.attrib_terms, \'one\', _sub_attr.id))) IS NOT NULL)) 
    FROM prop_attributes AS sub_prop_attr LEFT JOIN attr';

這是 MySQL 查詢:

$Srelated_attributes = ", (SELECT JSON_OBJECTAGG(attribute_name, (SELECT CAST(CONCAT('[',GROUP_CONCAT(JSON_QUOTE(_sub_attr.attribute_name)),']') AS JSON) FROM attributes AS _sub_attr WHERE JSON_EXTRACT(sub_prop_attr.attrib_terms, JSON_UNQUOTE(JSON_SEARCH(sub_prop_attr.attrib_terms, 'one', _sub_attr.id))) IS NOT NULL)) FROM prop_attributes AS sub_prop_attr LEFT JOIN attributes AS sub_attr ON sub_prop_attr.attribute_id = sub_attr.id WHERE prop_id = p.id) AS JSON_attributes";

最后一個是長查詢的一部分,如果我去掉那部分它會起作用......我認為它可能與引號或 JSON 函數有關,但我還沒有找到任何好的解決方案來使相同的代碼工作。

大家有過相關經歷嗎? 希望我清楚我的問題描述。

我希望我可以使用我的查詢。 我也嘗試刪除我在問題描述中引用的查詢部分,錯誤消失了,所以我的問題可能出在查詢的那部分。

因為JSON不是 SQL 標准中的類型,所以 MariaDB 沒有實現CAST(... AS JSON) as its not a type

如果您刪除這些詞, CAST運算符將以相同的方式運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM