首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 9.x字符编码问题返回where()查询的不正确结果

Laravel 9.x字符编码问题返回where()查询的不正确结果
EN

Stack Overflow用户
提问于 2022-10-04 11:11:15
回答 3查看 130关注 0票数 0

后台-我正在创建一个阿拉伯英语词典,它使用音译作为术语的唯一标识符(例如,区分أكل/ʔakl/&أكل/ʔakal/)。许多阿拉伯字母没有拉丁字母的等价物,所以我使用了一些特殊字符,如āēīōū,ṣḍṭẓ&等等。

我有以下查询:

代码语言:javascript
复制
$asInflection = Inflection::where('translit', $term->slug);

我刚刚注意到,我使用特殊字符会返回不正确的查询结果。

在一种情况下,$term->slugʔamal &有一个拐点::where(‘翻译’,ʔāmāl)。Laravel返回一个匹配项,这是不应该的;对于字典的正常功能来说,绝对必要的是,这些字符不能被同等对待。我不确定问题是与PHP有关还是与MySQL有关;我很确定这个问题与Laravel本身无关,但我想我可以通过Laravel来解决这个问题。

如有任何建议,敬请见谅。

EN

回答 3

Stack Overflow用户

发布于 2022-10-04 14:49:44

你可以试试这个:

代码语言:javascript
复制
$asInflection = Inflection::where('translit', $term->slug)->get();
票数 1
EN

Stack Overflow用户

发布于 2022-10-04 12:00:35

我认为数据库中存在字符识别问题。

如果您想匹配一些特定的字符,那么应该为translit类型列使用translit类型的排序规则类型,而不是utf8_general_ci

因此,这里您需要将列排序规则类型从utf8_general_ci替换为utf8_unicode_ci

票数 0
EN

Stack Overflow用户

发布于 2022-11-23 22:51:40

āēīōū, ṣḍṭẓ可以用utf8mb4表示,这是您应该使用的MySQL字符集。latin1不应用于阿拉伯语。

代码语言:javascript
复制
select 'أكل /ʔakl/' = 'أكل /ʔakal/';

返回false (0)。这仅仅是因为上一次a

أكل /ʔakal/是在utf8mb4中的;下面是它的HEX():

代码语言:javascript
复制
D8A3 D983 D984 2F CA94 61 6B 61 6C 2F 

所以我不认为需要āēīōū, ṣḍṭẓ,也许是缺少键盘入口吗?

UNICODE是控制组织。PHP、MySQL、Laravel等简单地遵循它的规则。(我不知道Inflection的事。)

运行这个,看看你有什么校对。我没有看到任何与阿拉伯语有关的东西:

代码语言:javascript
复制
SHOW COLLATION LIKE 'utf8mb4%';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73947023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档