Mysql 按数字之前的字符排序

Mysql 按数字之前的字符排序,mysql,Mysql,我的问题是,MySQL将字符排在数字之前。举个简单的例子,我们在数据库中有以下字符串: 3,a,2,1,b ORDER BY语句将返回以下内容: a、b、1、2、3 但我希望它是: 1,2,3,a,b 我的数据库是utf8\u unicode\u ci,但这没有帮助。它仍然会产生错误的结果。(我不能只检查它们是否是数字,然后将它们排序到顶部,因为一个项目也可以命名为“2something”,并且必须在“asomething”之前)。有什么想法吗 编辑:我发现了问题。在数据库(存储用户)中,我按C

我的问题是,MySQL将字符排在数字之前。举个简单的例子,我们在数据库中有以下字符串:

3,a,2,1,b

ORDER BY语句将返回以下内容:

a、b、1、2、3

但我希望它是:

1,2,3,a,b

我的数据库是
utf8\u unicode\u ci
,但这没有帮助。它仍然会产生错误的结果。(我不能只检查它们是否是数字,然后将它们排序到顶部,因为一个项目也可以命名为“2something”,并且必须在“asomething”之前)。有什么想法吗


编辑:我发现了问题。在数据库(存储用户)中,我按
CONCAT(name,login)
排序,名称为
NULL
。MySQL orders
NULL
始终位于顶部,因此字符位于数字的顶部(名称字段为空字符串)。

如果列类型为
character
varchar

请执行以下操作:

SELECT id FROM example ORDER BY IF(id REGEXP '[0-9]+',id,CONCAT('0',id) )

这将在字母前添加“0”,并按字母排序。将返回原始列

您可以尝试在
order by
子句中执行
强制转换
并检查结果吗

order by cast( desired_field as char )

您需要对排序字段应用排序规则

试一试


然后是
3,2,1,b,a
。是的。。我刚看到要求。。让我更改它。停止混合变量String/Boolean/Int/Uint/Number/等等……它们都是字符串,但也可能包含数字。(我将用户名保存在该表中)您确定mysql将字符排序在数字之前???我不这么认为!!试过了。那些数字1,2和3不是字符串。如果是的话,asc的订单会起作用的。我敢肯定,这就是问题所在。这是字符串。
SELECT yourfield
FROM yourtable
ORDER BY yourfield COLLATE latin1_general_ci