gpt4 book ai didi

MySQL : Select from table based on shape of arabic character in a column

转载 作者:行者123 更新时间:2023-11-29 09:52:07 27 4
gpt4 key购买 nike

我有一个包含阿拉伯语单词的表,该列的排序规则是utf8_general_ci。我想根据阿拉伯字母的形状检索单词,而不仅仅是字母本身。

例如:(p) 这是这封信的基本形式。根据它在单词中的位置,它会具有不同的形状,例如 (ـ) 或 (ــ) 或 (ــ)

首先,我尝试使用 unicode 在列中识别它们例如:

( ) = 0xFE91 (unicode) = 0xEFBA91 (UTF-8)

使用此查询:

SELECT * FROM arabicwords WHERE ArWord = char(0xEFBA91 using utf8)

这里有两个问题

首先,我不知道如何将“LIKE”与 char() 方法一起使用。我尝试用谷歌搜索,但没有结果。

其次,我尝试使用 php 来避免 LIKE 的问题。

$string ="U+FE91";
$utf8string = html_entity_decode(preg_replace("/U\+([0-9A-F]{4})/", "&#x\\1;", $string), ENT_NOQUOTES, 'UTF-8');

$query = mysqli_query($connection, "SELECT * FROM arabicwords WHERE ArWord LIKE '%".$utf8string."%' ");

但这会返回一个空结果。

谁能告诉我我做错了什么,或者是否有更好的方法。

谢谢

最佳答案

考虑

WHERE HEX(word) REGEXP '^(..)*EFBA91'

说明:

^  -- anchor at start of string
(..)* -- any number of 2-byte pairs, namely hex pairs making up a character
EFBA91 -- match the hex for "beh initial form"

如果通过“initial”,这仅位于“单词”的开头,那么这将起作用,并且效率更高:

WHERE HEX(word) LIKE 'EFBA91%'

假设它按我的预期工作,这可能会更有效:

WHERE word LIKE UNHEX('EFBA9125')

(注意:HEX('%') = '25'。)

(摘自OP的评论:)

应该匹配:

مسابح  -- D985 D8B3 D8A7 D8A8 D8AD 
ابريق -- D8A7 D8A8 D8B1 D98A D982
برق -- D8A8 D8B1 D982
باسم -- D8A8 D8A7 D8B3 D985

不应匹配:

طبيب   -- D8B7 D8A8 D98A D8A8
كلب -- D983 D984 D8A8
أب -- D8A3 D8A8
مسبح -- D985 D8B3 D8A8 D8AD

由于十六进制完全不同,我们需要依赖 COLLATION 来识别某些 BEH 与“初始形式 BEH”匹配。 utf8mb4_unicode_520_ci 实现 Unicode 版本 5.20 标准。也许其他人可以解读该标准,以说明 5.20 如何处理这种情况。

请注意,MySQL 8.0 具有带有 utf8mb4_0900_ai_ci 的 Unicode 9.0。看看它的工作原理是否有所不同可能会很有趣。

测试两个不同的 Beh 是否被同等对待:

SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
SELECT UNHEX('D8A8') = UNHEX('EFBA91'); -- returns 0 (false)

因此,这些单词都不会匹配。与版本 8.0.15 类似:

SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci;
SELECT UNHEX('D8A8') = UNHEX('EFBA91'); -- also false

如果您想讨论在单词开头检查 D8A8,我们可以这样做。

关于MySQL : Select from table based on shape of arabic character in a column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54626043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com