在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/