我正在使用PDO连接到MySQL数据库。在我的连接字符串中,我已经添加了charset=utf8mb4
,我的所有数据库和表格都是utf8mb4_unicode_ci
,但是我面临一个问题。PHP MySQL搜索字符编码问题
为了寻找基于其对content
表题项我用下面的代码:
SELECT * FROM content WHERE title LIKE '%سيگنالها%'
关键字是一个波斯词。现在上面的代码返回1结果是正确的并且如预期的那样。
但如果我让我的PHP应用程序形式,要么通过与MacOS/Windows PC或通过使用Android手机,我得到0的结果进入SAME字。
我跟踪这个问题下来,好像即使由用户输入的字看起来完全一样的一个已经在数据库中,它们实际上是不相同。
根据该online tool,十进制字符码
为سيگنالها
它是:1587年,1 0,1711,1606,1575,1604,1607,1575
虽然
为سیگنالها
这是:1587,1 0,1711,1606,1575,1604,1607,1575
您是否发现了电子差异?这是粗体。事实上,如果您复制两个值并将它们复制到here中,您将看到自己的差异。
我能做些什么来解决这个恼人的问题呢?我使用PHP 7和MariaDB 10.1。
什么是网页字符集?它必须是utf-8,而且你必须在mysql连接后执行'SET NAMES utf8'。请发布示例代码。 – Akam
@Akam它也是'utf-8'也可以在phpmyadmin中测试。相同的结果。 – VSG24
好吧,这是键盘问题,我也使用Unikurd(kurdish sorani)与波斯语和阿拉伯语相同的字母,有时候,用户使用的键盘与保存在数据库中的Unicode实体不同,但我们解决了这个问题通过用普通替换字母。 – Akam