在 MySQL 中,我的数据库和表的整理是 utf8_persian_ci。这种特定的排序规则,与 utf8_general_ci 不同,认为 "1","2","3",... 和 "1","2","3",... 的权重相同(后者是波斯数字格式) . 相同的权重意味着在搜索查询中应该返回波斯语和拉丁语格式。尽管我的数据库、表甚至 collation_server(我在 my.cnf 中定义)都是 utf8_persian_ci,但我的搜索查询不会同时返回波斯和拉丁数字:
桌子:
--------
| col |
|--------|
| 1 |
|--------|
| ۱ |
----------
(col 类型为 varchar)
询问:
SELECT * FROM my_tbl tbl where tbl.col like "1"
结果:
--------
| col |
|--------|
| 1 |
|--------|
我发现以下查询返回了我想要的结果:
SELECT * FROM my_tbl tbl where tbl.col like "1" collate utf8_persian_ci
返回:
--------
| col |
|--------|
| 1 |
|--------|
| ۱ |
----------
我的第一个问题是我无法弄清楚为什么我必须编写collate utf8_persian_ci,尽管 MySQL 服务器和数据库的默认排序规则是 utf8_persian_ci。
我的第二个问题是我正在处理的应用程序正在使用 JPA。所以我写的查询是不支持collate utf8_persian_ci的 JPQL 。我需要一个等效代码来整理JPQL 中的 utf8_persian_ci,或者我应该将 MySQL 配置为 在查询结束时不使用整理 utf8_persian_ci并获得指定的结果。