我正在开发一个UTF-8波斯网站,该网站集成了mysql数据库.网站中的所有内容都是通过管理面板导入的,而且都是波斯语.

正如你可能知道的,阿拉伯语和波斯语有相同的字母,除了一些.

因此,如果一个人搜索"بازی",mysql将不会找到"بازي"作为结果.

Important Note: 'ی' is not the only character with this property, there are lots of them and they are very similar.

我如何解决这个问题?

One simple naive solution似乎是在将数据导入数据库之前将所有"ي"替换为"ی",但我正在寻找一个比这更好的健壮解决方案.

推荐答案

亲爱的EBAG,我们在Unicode有一个单独的Arabic块,包含阿拉伯语和;Persian个字符.

06CC是波斯语ی064A是阿拉伯语ي

默认的windows键盘使用code page 1256来表示阿拉伯语字符,而对于波斯语和阿拉伯语用户,则将064A作为默认的ي,因为阿拉伯用户比波斯语用户多得多.

ISIRI制作一个标准键盘ISIRI 9147,并在其上放置阿拉伯语和波斯语Yeh,但Perisan ی是默认字符.使用标准键盘的波斯语用户将使用标准的波斯语ی‍ while the rest of them use arabicي`.

正如你们通常所说,当我们将数据保存到数据库时,我们将阿拉伯语ي改为波斯语‍ی,当我们从中读取数据时,我们只 Select 波斯语,所以一切都是真实的.

第二种方法是在web应用程序中使用JavaScript文件来控制用户输入.大多数波斯网站都使用这种方法将字符保存到数据库中.在这种方法中,用户不需要为波斯语或阿拉伯语键盘安装任何键盘布局.他/她只需将键盘置于English,然后在JavaScript文件开发人员中判断哪个字符与他相等.Here您可以找到ISIRI 9147 javascript用于web应用程序,以及使用它的波斯Guid.

第三种方法是使用屏幕键盘,其工作原理与前一种键盘一样,具有用户界面,通常适用于不熟悉波斯键盘的用户.

第四种方法是搜索两种方言.正如您所知,当您安装MySqlSQL Server时,您可以设置102,还可以 Select 支持方言(和区分大小写).如果你用方言进行阿拉伯语排序,你可以得到这两种语言的结果,通常这在sql server中效果很好,我不会在MySql中测试它.这是迄今为止最好的解决方案.

但如果我是你,我会实现一个简单的sql function,得到nvarchar,然后返回nvarchar.当我想写数据的时候,我就叫它.无论何时你想阅读,你都可以 Select 标准的.

对不起,我的 tail 太长了.

Mysql相关问答推荐

根据计数按月和年对数据进行分组()

计算男生的人数和女生的人数.学生是有入学记录的人

在MySQL中使用FIRST_VALUE()

在 mySQL 中计算每日数组的每周指标

使用 SELECT 时应锁定多少行 .. FOR UPDATE LIMIT 1

根据 Power Query 中的条件替换值

生成直到 10 的平方数序列

使用 autocommit = 0 和 InnoDB 表的 LOCK TABLES 检测死锁

Next-key lock explication - 范围的主键

基于 2 列的重复行的 SQL 查询

WHERE SQL 语句中的列顺序是否重要

如何将表的链接列转换为 SQL 中的行?

Python MYSQL 更新语句

phpmyadmin没有收到要导入的数据错误,如何解决?

Drupal 的默认密码加密方法是什么?

如何让mysql自动启动? (仅限 linux-cli)

Sequelize:销毁/删除表中的所有记录

如何将 mysqldump 的输出拆分为较小的文件?

MySQL连接查询使用like?

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'