MySQL 8.0使用OFFSET与FETCH执行查询报错该如何解决?
MySQL 8.0 FETCH语法执行报错解决方案
报错核心原因
你遇到的报错来自两个可能的触发点:
- 你使用的数据库可视化客户端默认开启了「查询自动追加LIMIT 100」的配置,额外追加的LIMIT语句和FETCH语法产生冲突,导致SQL语法校验失败
- 你使用的MySQL 8.0小版本低于8.0.11,该版本之前对标准SQL的FETCH语法支持存在缺陷
正确使用方式
方案1:使用标准FETCH语法
先关闭客户端自动追加LIMIT的相关配置,再执行以下语句即可(仅支持MySQL 8.0.11及以上版本):
SELECT Name, Address FROM Employees ORDER BY Salary OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY;
方案2:使用MySQL原生LIMIT分页写法(全版本兼容,更推荐)
MySQL原生支持更简洁的LIMIT分页语法,等价于FETCH的分页效果,且兼容性更强:
SELECT Name, Address FROM Employees ORDER BY Salary LIMIT 2 OFFSET 2;
注意事项
- 你当前表中的
Salary字段为varchar类型,排序时会按照字符串规则而非数值大小执行,若要按薪资数值排序,建议将字段类型调整为INT或DECIMAL类型 - 分页查询建议添加唯一字段作为第二排序条件,例如
ORDER BY Salary, EmpID,避免相同薪资的数据分页时出现顺序混乱的问题
内容的提问来源于stack exchange,提问作者Prashanth C
相关产品推荐
相关产品推荐

