我有一个包含一些正则表达式的表。默认情况下,该表是使用utf8mb4_general_ci排序规则创建的。一切都很好,直到我尝试添加一个包含同音字的正则表达式,如this one。正则表达式/𝑪𝑹𝒀𝑷𝑻𝑶/一旦存储在我的数据库中,将永远不会匹配。是什么导致了这种行为?我怀疑mysql表行排序规则出错了。如果是这样,应该使用什么排序规则来修复这个问题?更改排序规则是否会影响我已经存储在该表中的其他正则表达式(超过3 k,但纯文本,没有同音异义字)?
smdncfj31#
可以创建一个COLLATION来平等地对待同音字,但我不认为MySQL中存在这种情况。我尝试使用默认排序规则:
42 66=x0042 [B] L LATIN CAPITAL LETTER B CE92 914=x0392 [Β] L GREEK CAPITAL LETTER BETA D092 1042=x0412 [В] L CYRILLIC CAPITAL LETTER VE
并且得到了
SELECT 'Β' = 'B' AS 'beta:b', 'B' = 'В' AS 'b:Ve'; +--------+------+ | beta:b | b:Ve | +--------+------+ | 0 | 0 | +--------+------+
MySQL 8.0更新了它的regexp处理器以处理utf8mb4,因此现在
mysql> SELECT 'Β' RLIKE '[ΒBВ]'; +----------------------+ | 'Β' RLIKE '[ΒBВ]' | +----------------------+ | 1 | +----------------------+
因此,使用一组“字符类”,您可以构建一个正则表达式来检查任何类似于B的集合,从而检查类似于CRYPTO的集合。
1条答案
按热度按时间smdncfj31#
可以创建一个COLLATION来平等地对待同音字,但我不认为MySQL中存在这种情况。
我尝试使用默认排序规则:
并且得到了
MySQL 8.0更新了它的regexp处理器以处理utf8mb4,因此现在
因此,使用一组“字符类”,您可以构建一个正则表达式来检查任何类似于B的集合,从而检查类似于CRYPTO的集合。