我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
上面的另一个缺点是上面不能使用任何索引,因为每一行都有一个操作。
我也不确定引入非拉丁字符后会产生什么效果。
有没有一种高效的方法让 MySQL 执行自然语言排序?