6

SFについても同様の質問がたくさんあることは知っていますが、私は新しい質問を正当化するのに十分なほど異なっていると思います。utf8_unicode_ciを持つutf8として単一の列を持つテーブルがあります。また、この列には、言語コードを示す別の列とともに一意のキーがあります。列のデータは、さまざまなスクリプト(さまざまなアクセントのあるラテン語、中国語、ロシア語など)に含まれています。

問題は、発音区別符号(つまり、スペイン語のanoとaño)だけが異なる意味の異なる2つの単語を入力したい場合があることです。utf8_unicode_ciは大文字と小文字の両方に依存しないため、これらは同じであると見なされ、1つだけ入力できます。それは最悪だ。理想的には、列全体を大文字と小文字を区別しないがアクセントを区別する照合に切り替えるだけですが、それは存在しないようです。多くの異なるものがこの列を使用しているので、大文字と小文字の区別で混乱することを恐れて、列のデフォルトの照合をutf8_binに変更したくありません。

したがって、この列にヒットする多くの既存のクエリでデフォルトの大文字と小文字の区別に影響を与えないが、発音区別符号のみが異なる単語を追加できるソリューションが必要です。アイデア?必要に応じて、一意キー制約のみをutf8_binに切り替えますが、表に大文字と小文字だけが異なる2つのものが必要ないため、切り替えたくありません。

4

2 に答える 2

1

ここでパンクしたタイヤを再発明する(ホイールを再発明する)必要はありません。

MySQLには2つのスペイン語の照合があります。

utf8_spanish_ci(現代スペイン語)およびutf8_spanish2_ci(伝統的なスペイン語)

これらは、Nとnを一緒に照合する必要があることを十分に理解している言語を知っていますが、ÑとñはNとOの間で異なる文字です。スペイン語では、Ñは実際には別の文字であり、アクセントではありません。

列の照合をutf8_spanish_ciに設定すると、すべてが希望どおりに機能します。

于 2012-06-13T00:47:47.160 に答える
0

私が考えることができる唯一のことは(あなたのニーズに合った照合を見つけることなく)、差別化を処理するアプリケーション層(MySQLの外)で何かを変更することです。

たとえば、大文字と小文字は関係ないので、プログラムで何かを実行して、データベース内のすべての行の大文字と小文字を下げることができます。次に、照合をutf8_binに変更します。

次に、アプリケーションで、データベースに入る前にすべてを小文字に変換できます(これは発音区別符号には影響しないと思います)。そうすれば、人々が複数のケースを入力しようとしてもエラーが発生します。テーブルに入力するものを事前調整するために数行のコードを変更するだけで、発音区別符号の問題は発生しません。

于 2012-06-13T00:26:22.027 に答える