Pimcore安装出错: * WITH RECURSIVE is required
什么是 CTE?
CTE(公用表表达式)也称为子句WITH,是一种 SQL 功能,它返回可供其他查询使用的临时数据集。由于它是临时结果,因此不会存储在任何地方,但仍然可以像引用任何其他表一样引用它。
CTE 有两种类型:非递归和递归。
WITH RECURSIVE查询也叫递归查询,语法如下:
WITH RECURSIVE cte_name AS (
cte_query_definition (the anchor member)
UNION ALL
cte_query_definition (the recursive member)
)
SELECT *
FROM cte_name;如果您希望 CTE 是递归的,那么在WITH编写RECURSIVE关键字之后。然后一切如常:AS后面是带有 CTE 查询定义的括号。第一个查询定义称为锚成员。
要将锚成员与递归成员连接起来,需要使用UNION 或者UNION ALL命令。显然,递归成员是 CTE 的递归部分,它将引用 CTE 本身。
Pimcore安装出现的WITH RECURSIVE is required错误

解决这个问题的办法有两个:
一 注释检测代码段
找到 vendor/pimcore/pimcore/lib/Tool/Requirements.php,大约328行
$queryCheck = true;
try {
$db->executeQuery(
'WITH RECURSIVE counter AS (
SELECT 1 as n UNION ALL SELECT n + 1 FROM counter WHERE n < 10
)
SELECT * from counter'
);
} catch (\Exception $e) {
$queryCheck = false;
}
$checks[] = new Check([
'name' => 'WITH RECURSIVE',
'state' => $queryCheck ? Check::STATE_OK : Check::STATE_ERROR,
]);把这段代码注释掉。
二 升级mysql至8.0