RLIKE/REGEXP 和 LIKE 的等效性 - 匹配整个字符串与任意子字符串

Equivalency of RLIKE/REGEXP and LIKE - matching whole string vs. arbitrary substring

我有两个问题。

SELECT count(AlbumID)
  FROM album
  WHERE albumname like '%[%]';

结果:15733

SELECT count(AlbumName)
  FROM album
  WHERE AlbumName RLIKE '.*\[.*\]';

结果:15740

所以你可以看到 like returns 比 rlike 少了 7 个元素。我有两个问题,为什么会这样?语句不一样吗?如果我正在寻找包含 Result: Artist - Song [Live]Result: Artist- Song [Gold CD, Excplicit Lyrics] 的名称,那么查询 return 正确的结果是什么?

的确切等价性
LIKE '%[%]' 

REGEXP '^.*\[.*\]$'

(注意 RLIKE 只是一个 mSQL'ish synonym of REGEXP)。简而言之,这意味着 LIKE 总是匹配整个字符串,而 REGEXPRLIKE 可能匹配任何子字符串。

这就是为什么我会假设周围显然有七个 AlbumNames

MyName[abc]plus

MyName [abc]!

您可以尝试通过

来确定这七条记录
SELECT AlbumName FROM album 
WHERE AlbumName RLIKE '.*\[.*\]' AND AlbumName NOT RLIKE '^.*\[.*\]$';