在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...
但我什么都没得到,我的意思是零。代码有什么问题?我尝试了几种变体,都同样不起作用。
答案 0 :(得分:0)
这是 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
答案 1 :(得分:0)
根据官方website规范,MySQL正则表达式以字节方式匹配
REGEXP和RLIKE运算符按字符比较字符 即使a,字节值和重音字符也不能相等 鉴于整理将它们视为平等。
如果您可以匹配任何字符代替[eéèêë]
,这应该足够了:
$Query = "SELECT COUNT(*) FROM theTable WHERE field REGEXP '^Dom-R.+?my$'";
答案 2 :(得分:0)
如果
CHARACTER SET
为utf8
或utf8mb4
,和 COLLATION utf8_bin
,然后 WHERE ... = ...
和WHERE ... LIKE ...
将遵守上述规定。由于已经讨论过的原因,REGEXP
(RLIKE
)无法使用。
This显示相同的内容(适用于=
和LIKE
。)
如果您只是搜索Dom-Remy
的字符串,请使用
fieldValue LIKE '%Dom-Remy%`
而不是regexp / rlike
如果您有更复杂的需要REGEXP
的内容,请使用详细信息开始一个新问题。