在MySQL中,我的数据库和表的collate是utf8_波斯语。这个特定的排序规则不同于utf8_general_ci,它考虑了“1”、“2”、“3”的相同权重,。。。还有“۱”,“۲”,“۳”,。。。(后者是波斯语数字格式)。相同的权重意味着在搜索查询中,应同时返回波斯语和拉丁语格式。虽然我的数据库、表甚至排序服务器(我在.cnf中定义了它)都是utf8_波斯语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    |
|--------|
|   ۱    |
----------

我的第一个问题是,虽然MySQL服务器和数据库的默认排序规则是utf8_persian_ci,但我不明白为什么要编写collate utf8_persian_ci。
我的第二个问题是我正在开发的应用程序使用的是JPA。所以我编写的查询是JPQL,它不支持collate utf8_波斯语_ci。
我需要一个等价代码来整理JPQL中的utf8\u波斯语ci,或者我应该将MySQL配置为在查询结束时不使用collate utf8\u波斯语ci,并得到单独的结果。

最佳答案

虽然服务器、数据库和表的默认排序规则是utf8_persian_ci,但这些默认值可能已被列本身的定义覆盖。
您可以强制对列进行所需的排序;例如:

ALTER TABLE my_tbl MODIFY col VARCHAR(123) COLLATE utf8_persian_ci

关于java - MySQL不会在搜索查询中同时返回波斯语和英语数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11613127/

10-09 13:25