在MariaDB 10.2中结合OVER()函数与别名时触发错误的问题
解决MariaDB 10.2 + phpMyAdmin中OVER()与别名结合的语法错误问题
我之前也踩过MariaDB 10.2搭配phpMyAdmin的这个坑!你遇到的情况其实不是SQL语法本身的问题,而是phpMyAdmin的SQL解析器在这个版本组合下存在兼容性bug,它没法正确识别窗口函数(OVER())后跟别名的写法,导致误报了一堆奇怪的错误。
你遇到的错误现象总结:
当执行包含窗口函数+别名的语句时:
SELECT AVG(foo) OVER() AS bar FROM some_table
会触发以下无厘头的错误:
an alias was previously found (near bar)unexpected token (near bar)an alias was expected (near )
但单独使用其中任意一个功能都完全正常:
-- 仅用别名,无报错 SELECT AVG(foo) AS bar FROM some_table -- 仅用窗口函数,无报错 SELECT AVG(foo) OVER() FROM some_table
可行的解决办法:
换用其他数据库客户端
既然数据库本身支持这个语法(单独执行都没问题),可以暂时避开phpMyAdmin,用MariaDB命令行、Navicat、DBeaver这类工具来执行带窗口函数+别名的SQL,它们能正确解析语法。给窗口函数部分加括号包裹
如果你必须用phpMyAdmin,可以尝试把窗口函数的部分用括号包起来,有时候能绕过它的解析bug:SELECT (AVG(foo) OVER()) AS bar FROM some_table升级组件版本
- 升级phpMyAdmin到较新的版本:后续版本的phpMyAdmin修复了不少语法解析的兼容性问题;
- 升级MariaDB到10.3及以上:新版本的MariaDB对窗口函数的支持更完善,也能减少这类奇怪的兼容性问题。
内容的提问来源于stack exchange,提问作者Matt Maier
相关产品推荐
相关产品推荐

