varchar
MySQL データベースに、任意の文字と数字を含むテキストを格納する列があります。
スキーマはutf8
、文字セットおよびutf8_unicode_ci
照合順序として使用します。InnoDB
トランザクションを使用する必要があるため、データベース エンジンとして使用されます。
私がやりたいことは、ORDER BY
そのコラムを自然にできるようになることです。たとえば、次のサンプル データがあります。
12234 some random text
my text 23
mytext3
123456abcd
text23
text1
text111
text33
テスト データをテスト テーブルに挿入した後、クエリと列を実行ORDER BY
します。varchar
ASC
SELECT * FROM `test` WHERE 1 ORDER BY data ASC;
問題は、数値の「サイズ」が考慮されていないことです。
12234 some random text
123456abcd
my text 23
mytext3
text1
text111 <-------
text23
text33
次に、(ほぼ)解決策を提供するこの質問を見つけました:
SELECT * FROM `test` WHERE 1 ORDER BY data * 1 DESC;
123456abcd <------ These 2 should
12234 some random text <------ be swapped
my text 23
mytext3
text23
text1
text33
text111
上記のもう1つの欠点は、各行に操作があるため、上記がインデックスを使用できないことです。
また、ラテン文字以外の文字を導入すると、どのような効果が得られるかわかりません.
MySQL に自然言語ソートを実行させる効率的な方法はありますか?