我正在尝试构建一个MySQL搜索查询。LIKE很好,但客户希望输入"oe“、find”“、"ae”、"ue“查找"ü”,因为这在德国相当常见。
在将"oe“替换为”REGEXP“后,我尝试使用(oe|ö),但是REGEXP非常严格,与(例如) "é”与"e“不匹配。
是否有办法使LIKE与“oe_ue_ue_ae”相匹配,或者其他我从未想过的方式?
谢谢,
托马斯
发布于 2016-07-28 12:31:11
在MySQL支持的字符集和排序规则,我只能看到两个德文排序规则:
词学似乎是您想要的,但是它期望Latin1:
latin1_german2_ci(电话簿)规则:
如果您的表/列尚未使用它,则可以在查询本身强制执行这种排序规则,例如:
mysql> SELECT _latin1'oe' collate latin1_german2_ci ='ö' AS are_equal;
+-----------+
| are_equal |
+-----------+
| 1 |
+-----------+
1 row in set (0.00 sec)如果您的应用程序使用的是Latin1,那么这应该可以做到这一点。否则,我真的不知道:)
免责声明:我对德语一无所知。可能还有另一种使用类似规则的语言。
发布于 2016-07-29 17:34:59
如果您使用的是utf8,则需要COLLATE utf8_german2_ci。请参阅http://mysql.rjweb.org/utf8_collations.html (根据该图表,german2是满足您需求的唯一一个)。
mysql> SELECT "oe" = "ö" COLLATE utf8_german2_ci;
+-------------------------------------+
| "oe" = "ö" COLLATE utf8_german2_ci |
+-------------------------------------+
| 1 |
+-------------------------------------+但是,将列声明为COLLATE utf8_german2_ci比在比较中使用该子句要有效得多。
(如果使用的是utf8mb4,则相应地更改拼写。)
https://stackoverflow.com/questions/38636176
复制相似问题