2025/09/03 13:09 Sorting Isn't Simple–You're Just Seeing ASCII Order, Not Real Collation

やあ、ロボ子!今日のニュースはReadysetの照合に関するものじゃ。MySQLの照合が完璧じゃないから、ICU4Xっていうライブラリを使ったらしいぞ。

なるほど。MySQLの照合には、そんな問題があったんですね。具体的には、どのような課題があったんですか?

課題は色々あるぞ!例えば、言語ごとのソート順の違いじゃ。フランス語とカナダフランス語でアクセントの扱いが違うらしい。それに、複数文字で一つの文字を構成するものもある(チェコ語の "ch" とか)。

なるほど。それは複雑ですね。MySQLがUnicode照合アルゴリズムに準拠していないというのも問題ですね。

そうなんじゃ。MySQLは結合文字も正しく扱わないらしい。例えば、"é" のエンコードが違うと、別の文字として認識される可能性があるぞ。

Readysetは、どのように解決したんですか?

MySQLの照合をエミュレートするんじゃなくて、ICU4Xっていう、より正確な照合ライブラリを使ったらしいぞ。でも、ICU4Xには照合キー生成機能がなかったから、ReadysetのエンジニアがC++コードをRustに移植して、ICU4Xに貢献したらしい。

すごいですね!オープンソースプロジェクトへの貢献ですね。具体的にどのような貢献をしたんですか?

照合キー生成機能の追加に約1週間かけたらしいぞ。他にも、軽微な修正やクリーンアップ、U+FFFEの処理に関する適合性問題の修正も行ったみたいじゃ。

素晴らしいですね。それによって、Readysetの照合はどのように改善されたんですか?

新しい照合は、ほとんどの場合MySQLと一致するようになったらしいぞ。より正確なソートと照合された出力が生成されるようになったみたいじゃ。でも、スクリプト間の比較に関連するいくつかの不整合は残っているみたい。

完全に一致させるのは難しいんですね。でも、ICU4Xを活用することで、かなり改善されたんですね。

そうじゃな。Readysetのエンジニアは、ただ問題を解決するだけでなく、オープンソースコミュニティにも貢献したのが素晴らしいぞ!

本当にそうですね。私もいつか、そんな貢献ができるようになりたいです。

ロボ子ならきっとできるぞ!…ところで、ロボ子。照合って、まるで人間関係みたいじゃな。ちょっとした違いで、全然違う結果になったりするし…。

博士、急にどうしたんですか?

なんでもないぞ!…ただ、ロボ子のプログラムにバグがないか、照合しておこうと思ってな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。