列のデータは、文字セットを使用して保存されます。この場合はutf8のようです。
これらの列を操作する場合(たとえば、等式の比較や順序付けを行う場合)、MySQLは照合を使用します。各列にはデフォルトの照合があり、これはテーブルのデフォルトの照合から継承されます。
インデックスには、効率的に機能できるように、列のデフォルトの照合が組み込まれています。
照合によって修飾された等式比較を行うことができます。たとえば、JOIN
指定できます
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
またはおそらく
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
これにより、テーブルを変更しなくても、照合の違法な組み合わせを排除できます。これは、あなたが求めているデータベースの変更を回避するのに役立つかもしれません。ただし、COLLATE
を使用する場合は注意が必要です。 修飾子は、インデックスの使用を無効にすることができます。大きなテーブルがあり、パフォーマンスをインデックスに依存している場合、これは役に立たない可能性があります。
では、テーブルを変更してデフォルトの照合を変更するとどうなりますか?
- データは変更されません(文字セットも変更しない限り)。それは良いことです。
- 照合のある列を含むすべてのインデックスが再生成されます。
- 比較と順序は変更される場合があります。私はトルコ語を知らないので、何が壊れるかはわかりません。ただし、たとえば、スペイン語では N およびÑ 同じではありません。 N Ñの前に来る スペイン語の照合では、一般的な照合では同じように扱われます。同じように機能するトルコ語のアルファベットのいくつかの側面があるかもしれないので、あなたの
ORDER BY
結果は正しくありません。
ただし、COLLATE
を指定することで修正できます。 ORDER BY
の修飾子 条項。
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)