我正在使用 PDO 连接到 MySQL 数据库。在我的连接字符串中,我已经添加了 charset=utf8mb4
并且我所有的数据库和表都是 utf8mb4_unicode_ci
,但是我遇到了一个问题。
为了根据 content
表中的标题搜索条目,我使用以下代码:
SELECT * FROM content WHERE title LIKE '%سيگنالها%'
关键字是波斯语单词。现在上面的代码返回 1 个正确的结果,符合预期。
但是 如果我在我的 PHP 应用程序中创建一个表单并使用 macOS/Windows PC 或使用 Android 手机输入 SAME 词,我会得到 0 个结果.
我跟踪了这个问题,似乎即使用户输入的单词看起来与数据库中已有的单词完全相同,但实际上它们不相同。
根据这个online tool , 十进制字符码
对于 سيگنالها
,它是:1587、1610、1711、1606、1575、1604、1607、1575
同时
对于 سیگنالها
是:1587, 1740, 1711, 1606, 1575, 1604, 1607, 1575
你看出区别了吗?它是粗体的。事实上,如果您复制这两个值并将它们传递到 here 中您会亲眼看到不同之处。
我该怎么做才能解决这个恼人的问题?我正在使用 PHP 7 和 MariaDB 10.1。
最佳答案
你在单词“سيگنالها”中的第一个“ي”与第二个单词“سیگنالها”是不同的字符,即“̶”
第一个 ي: 是阿拉伯字母 YEH (U+064A
)
第二个:是阿拉伯文字母FARSI YEH (U+06CC
)
它们的 Unicode 实体不同,因此它们不匹配。 请看https://www.key-shortcut.com/en/writing-systems/%EF%BA%95%EF%BA%8F%D8%A2-arabic-alphabet/获取更多信息。
关于PHP MySQL搜索字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46082132/