在PHP中查询数据库时,我遇到了mysql的这个问题。
PHP代码是:
$Query = "SELECT COUNT(*) FROM theTable WHERE fieldValue REGEXP 'Dom-R[eéèêë]my'";
$DBR = mysql_query($Query,$Connection);我希望这个查询能得到这样的结果,我的意思是找出它们的数量:
Dom-Remy
Dom-Rémy
Dom-Rèmy
...etc...但我什么也得不到,我是说什么都没有。代码中有什么错误?我已经尝试了几种变体,但都同样不起作用。
发布于 2016-09-07 08:16:10
这是Unicode字符的主题。
在您的示例中,e,é,è,ê,ë..不是单个字母,而是2,因为代字号也算作字符。这带来了许多复杂性和需要遵循的规则,以便满足Unicode规则。
你可以像这样做:([\x{0049}-\x{0130}])来搜索带有代字号的字母,但这个表达式可能会有所不同,这取决于你将在.net,java,javascript或php上使用这个表达式。
您还可以在此处检查每个字符代表的代码:
http://www.fileformat.info/info/unicode/char/search.htm?q=%C4%B0&preview=entity
发布于 2016-09-07 08:21:11
根据官方的website规范,MySQL正则表达式是以字节方式匹配的
REGEXP和RLIKE运算符通过字符的字节值比较字符,重音字符可能不相等,即使给定的排序规则将它们视为相等。
如果您可以匹配任何字符来代替[eéèêë],这应该就足够了:
$Query = "SELECT COUNT(*) FROM theTable WHERE field REGEXP '^Dom-R.+?my$'";发布于 2016-09-09 01:12:13
如果
CHARACTER SET是utf8或utf8mb4,COLLATION utf8_bin,然后'Dom-Remy‘= 'Dom-Rémy’= ...
WHERE ... = ...和WHERE ... LIKE ...将遵守上述规定。由于已经讨论过的原因,不能使用REGEXP (RLIKE)。
显示(对于=和LIKE)相等的值。
如果只是在字符串中搜索Dom-Remy,请使用
fieldValue LIKE '%Dom-Remy%`而不是regexp/rlike
如果你有一些更复杂的东西需要REGEXP,那么从细节开始新的问题。
https://stackoverflow.com/questions/39359535
复制相似问题