【发布时间】:2012-03-13 08:09:19
【问题描述】:
我有一个默认编码设置为 utf8 的 MySQL 数据库。因此,使用非 ASCII 字符应该没有问题。但是,通过 REGEXP 命令处理正则表达式似乎有点困难。
我正在尝试使用通配符根据正则表达式查询记录。 MySQL 提供的功能对我来说已经足够了,但它们似乎有点不正常,因为非 ASCII 字符(我尝试过 § 和 °)不是由一个通配符匹配,而是由两个通配符匹配。
例如,如果我在数据库中搜索名为“§123”的 wiki 页面,那么
SELECT * FROM wikipages WHERE title REGEXP '^.123$'
不会返回任何东西,但是
SELECT * FROM wikipages WHERE title REGEXP '^..123$'
返回所需的页面(注意额外的通配符)。
对于 ASCII 字符,只需要一个通配符。我想这与用多少字节来编码 utf8 中的字符有关。但是,我发现这种行为相当难看,因为如果 MySQL 不平等对待所有字符,我将无法使用正则表达式。
实际上是否有充分的理由说明它不能正常工作?有人知道如何解决我的问题吗?
提前致谢!
【问题讨论】:
-
在这个简单的例子中,
WHERE title LIKE '_123'可以工作,但在更一般的例子中你会失去 REGEXP 的威力。