我无法在mysql中搜索阿拉伯语文本。我在数据库中包含正常化阿拉伯语文本mysql
display_name
أحمد
但是,当我尝试做一个查询与
SELECT * FROM wp_users WHERE display_name LIKE '%احمد%'
我试着在查询的末尾添加一条记录的行
collate utf8_bin
但它也没有工作。我怎么能
احمد == أحمد
我无法在mysql中搜索阿拉伯语文本。我在数据库中包含正常化阿拉伯语文本mysql
display_name
أحمد
但是,当我尝试做一个查询与
SELECT * FROM wp_users WHERE display_name LIKE '%احمد%'
我试着在查询的末尾添加一条记录的行
collate utf8_bin
但它也没有工作。我怎么能
احمد == أحمد
我没有一个确切的解决方案,但我可以告诉你为什么它不工作。如果你希望这两个字符串被认为是相等的,那么你需要使用不同的排序规则,因为utf8_bin
比较了精确的代码点,而这两个字符串在进行这种考虑时明显不相同。通常,MySQL的utf8_general_ci
整理将提供音译和规范化,例如,所有这些比赛:
SELECT 'a'='A' COLLATE utf8_general_ci;
SELECT 'ü'='u' COLLATE utf8_general_ci;
SELECT 'ß'='ss' COLLATE utf8_general_ci;
但在你的情况下,它不能正常工作,并且也没有更准确的utf8_unicode_ci
归类:
SELECT 'احمد'='أحمد' COLLATE utf8_general_ci;
SELECT 'احمد'='أحمد' COLLATE utf8_unicode_ci;
This chart显示了MySQL的utf8_unicode_ci
归类中的中东语言的字符映射,并且您可以看到أ
和ا
字符不被认为是相等的,因此MySQL的默认归类不会解决此问题。
要解决这个问题,您有两种选择:在命中MySQL之前规范化您的字符串(即在PHP中),或者扩展MySQL以提供适当的排序规则以执行您所需的操作。
Ar-PHP project可以帮助前者,如sємsєм建议。您应该分别存储您的真实用户名和标准化用户名,以便您可以搜索一个并显示另一个。 Another project也提供了一种重新安排阿拉伯字符串以在MySQL中更好地工作的方式。
MySQL文档显示how to create a custom collation。它主要涉及编辑一个LDML XML文件(至少有一个BBEdit插件可以帮助实现这一点)并将其提供给MySQL。这将允许您创建一个映射,让您将某些字符视为等价物。这种方法的优点是它对PHP透明,并且数据库中不需要任何额外的列。如果您构建这样的映射,那么跨越多种编程语言的其他阿拉伯语用户(不仅仅是PHP)将会有所帮助。
就在你放入SELECT之前把'$ con> set_charset(“utf8”);'---'$ con'是一个DB连接变量。将其更改为您正在使用的那个。这可能/应该工作。 –
我正在使用wordpress。 $ wpdb-> get_results() – Ahmed
什么是您的数据库连接变量?我使用例如'$ con = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASSWORD,MYSQL_DB);' –