Ahm*_*med 8 php mysql wordpress arabic diacritics
我在mysql中搜索阿拉伯语文本时遇到问题.我在数据库中有一行包含记录
display_name
????
Run Code Online (Sandbox Code Playgroud)
但是当我尝试用查询进行查询时
SELECT * FROM wp_users WHERE display_name LIKE '%????%'
Run Code Online (Sandbox Code Playgroud)
我试图在查询结束时添加
collate utf8_bin
Run Code Online (Sandbox Code Playgroud)
但它也没有用.我怎么能
???? == ????
Run Code Online (Sandbox Code Playgroud)
我没有确切的解决方案,但我可以告诉你它为什么不起作用.如果您希望这两个字符串被视为相等,则需要使用不同的排序规则,因为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;
Run Code Online (Sandbox Code Playgroud)
但在你的情况下,它不起作用,也没有更准确的utf8_unicode_ci整理:
SELECT '????'='????' COLLATE utf8_general_ci;
SELECT '????'='????' COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
此图表显示MySQL的utf8_unicode_ci排序规则中的中东语言的字符映射,您可以看到?和?字符不相等,因此MySQL的默认排序规则不能解决此问题.
要解决这个问题,你有两个选择:在你的字符串到达MySQL之前规范化你的字符串(即在PHP中),或者扩展MySQL以提供适当的校对来做你需要的.
正如sємsєм建议的那样,Ar-PHP项目可以帮助前者.您应该单独存储您的真实用户名和标准化用户名,以便您可以搜索一个并显示另一个.另一个项目还提供了一种重写阿拉伯语字符串的方法,以便在MySQL中更好地工作.
MySQL文档展示了如何创建自定义排序规则.它主要涉及编辑LDML XML文件(至少有一个BBEdit插件来帮助解决这个问题)并将其提供给MySQL.这将允许您创建一个映射,使您可以将某些字符视为等效字符.这种方法的优点是它对PHP透明,您不需要在数据库中添加任何其他列.如果您构建这样的映射,那么对于跨多种编程语言的其他阿拉伯用户而言,这将是有益的,而不仅仅是PHP.
| 归档时间: |
|
| 查看次数: |
961 次 |
| 最近记录: |