2

MySQL では、データベースとテーブルの照合は utf8_persian_ci です。この特定の照合は、utf8_general_ci とは異なり、"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 ですが、なぜ照合 utf8_persian_ciを書かなければならないのか分からないことです。

私の 2 番目の問題は、私が取り組んでいるアプリケーションが JPA を使用していることです。したがって、私が書いているクエリは、照合 utf8_persian_ciをサポートしていない JPQLです。JPQL で utf8_persian_ci を照合するには同等のコードが必要です。または、クエリの最後で照合 utf8_persian_ciを使用しないように MySQL を構成 して、指定した結果を取得する必要があります。

4

1 に答える 1

2

サーバーデータベース、およびテーブルのデフォルトの照合順序は ですがutf8_persian_ci、そのようなデフォルトは列自体の定義によってオーバーライドされている可能性があります。

列で目的の照合を強制できます。例えば:

ALTER TABLE my_tbl MODIFY col VARCHAR(123) COLLATE utf8_persian_ci
于 2012-07-23T13:32:09.377 に答える