在MySQL中,我的数据库和表的排序规则是utf8_persian_ci。这个特定的排序,不像utf8_general_ci,认为相同的权重"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 |
|--------|
| ۱ |
----------我的第一个问题是,我不知道为什么要编写排序规则utf8_persian_ci,尽管MySQL服务器和数据库的默认排序规则是utf8_persian_ci。
我的第二个问题是,我正在处理的应用程序是使用JPA。因此,我正在编写的查询是JPQL,它不支持排序规则utf8_persian_ci。在JPQL中,我需要一个排序规则utf8_persian_ci的等价代码,或者我应该在查询结束时将MySQL配置为不使用collate utf8_persian_ci,并获得指定的结果。
发布于 2012-07-23 13:32:09
虽然服务器、数据库和表的默认排序规则是utf8_persian_ci,但此类默认值可能已被列本身的定义覆盖。
可以在列上强制执行所需的排序规则;例如:
ALTER TABLE my_tbl MODIFY col VARCHAR(123) COLLATE utf8_persian_cihttps://stackoverflow.com/questions/11613127
复制相似问题