从Mysql 5.7迁移到MariaDb 10.6.5后出现错误



我正在使用PHP-MySQLi-Database-Class为了构建查询,它在MySQL上工作得很好,但在切换到MariaDB数据库后,特定的单个查询会抛出这个错误:(抱歉的长文本)

*Uncaught Exception:你的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以获得正确的语法,以便在"JSON"附近使用FROM attributes AS _sub_attr WHERE JSON_EXTRACT(sub_prop_attr.attrib_te…在第一行查询:SELECT,pid作为id, DATEDIFF(CURDATE(),DATE(p.created))作为days, COALESCE(bed_room,bath_room,parking,construction_size,lot_size,floors,building_age)作为chs, (SELECT JSON_OBJECTAGG(attribute_name, (SELECT CAST(CONCAT('[',GROUP_CONCAT(JSON_QUOTE(_sub_attr_attribute_name)),']')作为JSON) FROM attributes AS _sub_attr WHERE JSON_EXTRACT(sub_prop_attr. properties))attrib_terms JSON_UNQUOTE (JSON_SEARCH (sub_prop_attr。attrib_terms, 'one', _sub_attri .id))))))不是NULL)) FROM prop_attributes AS sub_prop_attr LEFT JOIN attributes AS sub_attr ON sub_prop_attr。Attribute_id = sub_attr。LEFT JOIN (SELECT id, state_name, CONCAT("en ",state_name) AS state_alias FROM states) s on p.s state=s。

…这是查询:

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),因为它不是类型。

如果你去掉这些字,CAST运算符将以同样的方式运行。

最新更新