You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.7中REGEXP匹配重复字符时返回错误结果的问题

MySQL 5.7中的误区解析

你的问题核心不是正则匹配失效,而是字符串排序逻辑导致的结果不符合预期,具体细节如下:

  • 正则匹配本身是正常的:MySQL 5.7的REGEXP '^some-slug[0-9]*$'完全能匹配some-slug10,因为该正则规则允许some-slug后跟随任意长度的数字(包括多位),所以some-slug10是符合筛选条件的。
  • 排序逻辑的坑:slug是字符串类型,MySQL对字符串排序采用逐字符ASCII码比较。对比some-slug9和some-slug10时,前9个字符完全一致,第10位的9(ASCII码57)比1(ASCII码49)大,因此some-slug9会被判定为更大的值,在ORDER BY slug DESC时排在some-slug10前面,最终LIMIT 1取到的就是它。

修正方案

如果需要按slug末尾的数字数值大小排序,需要提取数字部分并转换为数值类型后再排序,示例SQL如下:

SELECT `slug` 
FROM `unittest`.`test_item` 
WHERE `slug` REGEXP '^some-slug[0-9]*$' 
ORDER BY CAST(SUBSTRING(slug, LENGTH('some-slug') + 1) AS UNSIGNED) DESC 
LIMIT 1;

内容的提问来源于stack exchange,提问作者NotX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:34:55