后台-我正在创建一个阿拉伯英语词典,它使用音译作为术语的唯一标识符(例如,区分أكل/ʔakl/&أكل/ʔakal/)。许多阿拉伯字母没有拉丁字母的等价物,所以我使用了一些特殊字符,如āēīōū,ṣḍṭẓ&等等。
我有以下查询:
$asInflection = Inflection::where('translit', $term->slug);我刚刚注意到,我使用特殊字符会返回不正确的查询结果。
在一种情况下,$term->slug是ʔamal &有一个拐点::where(‘翻译’,ʔāmāl)。Laravel返回一个匹配项,这是不应该的;对于字典的正常功能来说,绝对必要的是,这些字符不能被同等对待。我不确定问题是与PHP有关还是与MySQL有关;我很确定这个问题与Laravel本身无关,但我想我可以通过Laravel来解决这个问题。
如有任何建议,敬请见谅。
发布于 2022-10-04 14:49:44
你可以试试这个:
$asInflection = Inflection::where('translit', $term->slug)->get();发布于 2022-10-04 12:00:35
我认为数据库中存在字符识别问题。
如果您想匹配一些特定的字符,那么应该为translit类型列使用translit类型的排序规则类型,而不是utf8_general_ci。
因此,这里您需要将列排序规则类型从utf8_general_ci替换为utf8_unicode_ci
发布于 2022-11-23 22:51:40
āēīōū, ṣḍṭẓ可以用utf8mb4表示,这是您应该使用的MySQL字符集。latin1不应用于阿拉伯语。
select 'أكل /ʔakl/' = 'أكل /ʔakal/';返回false (0)。这仅仅是因为上一次a。
أكل /ʔakal/是在utf8mb4中的;下面是它的HEX():
D8A3 D983 D984 2F CA94 61 6B 61 6C 2F 所以我不认为需要āēīōū, ṣḍṭẓ,也许是缺少键盘入口吗?
UNICODE是控制组织。PHP、MySQL、Laravel等简单地遵循它的规则。(我不知道Inflection的事。)
运行这个,看看你有什么校对。我没有看到任何与阿拉伯语有关的东西:
SHOW COLLATION LIKE 'utf8mb4%';https://stackoverflow.com/questions/73947023
复制相似问题