java - MySQL 不会在搜索查询中同时返回波斯语和英语数字

标签 java mysql jpa jpql

在 MySQL 中,我的数据库和表的排序规则是 utf8_persian_ci。此特定排序规则与 utf8_general_ci 不同,认为“1”、“2”、“3”、...和“1”、“2”、“3”、...(后者是波斯数字格式)具有相同的权重.相同的权重意味着在搜索查询中应该返回波斯语和拉丁语格式。尽管我的数据库、表甚至 collat​​ion_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    |
|--------|
|   ۱    |
----------

我的第一个问题是,尽管 MySQL 服务器和数据库的默认排序规则是 utf8_persian_ci,但我无法弄清楚为什么我必须编写 collat​​e utf8_persian_ci

我的第二个问题是我正在处理的应用程序正在使用 JPA。所以我写的查询是 JPQL,它不支持 collat​​e utf8_persian_ci。 我需要一个等价代码来在 JPQL 中collat​​e utf8_persian_ci 或者我应该配置 MySQL 在查询结束时不使用 collat​​e utf8_persian_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/

相关文章:

java - 复制并数组到更大尺寸的数组,然后返回到原始大小的数组

java - 未设置引导类路径

mysql - 授予承包商 MySQL 权限以处理数据库

mysql - NodeJS JSON 到 SQL 和 SQL 到 JSON 库?

java - 如何在jpa存储库中使用jsonb_set来传递动态字符串?

java - 如何将菜单设置为在调用 Activity 时可见?

java - 新版本 POI 中缺少 poi-contrib-*.jar

php - 在 WordPress 页面中从 MySQL 插入并选择数据

hibernate - 连接表记录删除时违反参照完整性约束

java - Hibernate:通过反射持久属性访问字段 [private java.lang.Integer] 时出错