3

MySQLクエリのアルファベット順の並べ替え順序をカスタマイズしたいと思います。マルタ語では、 ċġħżの文字とともに標準のラテンアルファベットが使用されます。ċはc(など)と同じではないutf8_binため、照合を使用します。これにより、を使用すると、文字は次の順序で処理されます。ORDER BY

a b c d e f g h i j k l m n o p q r s t u v w x y z ċ ġ ħ ż

しかし、私は彼らにこの順序を持​​たせるように要求します:

a b ċ c d e f ġ g h ħ i j k l m n o p q r s t u v w x y ż z

つまり、昇順では、「abċ 」は「 abz 」の前に来る必要がありますが、文字の2進値を比較しているだけなので、現在は後になっています。MySQLでこのカスタム順序を実現する方法はありますか?

私はこのような解決策を見てきましたORDER BY FIELD(name, 'a', 'b', 'ċ', ...)が、これはこの場合には当てはまらないようです。

また、次のように、order関数に照合を追加しようとしましたORDER BY radicals COLLATE utf8_unicode_ciが、これは基本的にアクセント付きの文字を同一として扱います。したがって、「 aċd」、「ace」、「aċf 」のような並べ替えられた文字列を取得しますが、それも間違っています(「aċd」、「aċf」、「ace」である必要があります)。

私のフォールバックプランはもちろんPHPでソートを行うことですが、MySQL自体にソートを維持できれば、かなりきれいになります。何か案は?

4

3 に答える 3

3

MySQLでは、照合は文字セットの並べ替えとグループ化の処理方法を定義します。並べ替えルールが特定の言語ですでに定義されている場合は、適切な照合がすでに存在している可能性があります。

これは現在の照合をリストします:http://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html

それ以外の場合は、独自のカスタム照合を追加できます:http: //dev.mysql.com/doc/refman/5.5/en/adding-collat​​ion.html

編集:質問を読み直してください。すでにさまざまな照合を試していることがわかります。したがって、おそらく独自のカスタム照合を追加する必要があります。

于 2012-09-15T17:56:25.797 に答える
2

私はGavinToweyのアドバイスを受けて、そのような照合を自分で書きました。将来誰かがこれに遭遇して興味を持った場合は、ここにGitHubリポジトリがあります:マルタのMySQL照合(utf8_maltese_ci)

于 2012-09-17T19:16:21.940 に答える
1

を引き続き使用できますがFIELD、文字列間の同等性をテストします。あなたの場合、すべての引数は1文字の文字列であるため、を使用する必要がありますORDER BY FIELD(LEFT(name, 1), 'a', ...)。ただし、最初の文字でのみソートされます...

于 2012-09-15T17:34:07.897 に答える