我在MySQL數據庫中有一個varchar
列,它存儲了一些可以包含任何字符和數字的文本。對varchar列中包含文本和數字的數據進行排序
該模式使用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
然後我發現這個question這裏其中規定的(阿爾莫st)解決方案:
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
上述的另一個缺點是上面的代碼不能使用任何索引,因爲每行都有一個操作。
我也不確定一旦我們引入非拉丁字符,效果會是什麼樣子。
是否有一種高性能的方式讓MySQL執行自然語言排序?
我有點困惑。如果是按照DESC排序,那麼在12234之前不會有123456 shd? – sel 2012-07-24 01:15:41
這是因爲我按照鏈接的問題執行'ORDER BY data * 1'。 – F21 2012-07-24 01:18:42
[自然排序在MySQL]中可能的重複(http://stackoverflow.com/questions/153633/natural-sort-in-mysql) – outis 2012-07-24 01:41:22