我已经创建了一个MySql表。但是如果我将数据插入表中,则会出现问题。第二行的Mysql表ID为10
我的表行是这个样子
ID name
RS1 a
RS10 j
RS2 b
RS3 c
RS4 d
RS5 e
RS6 f
RS7 g
RS8 h
RS9 i
为什么ID是10号在第二行补充的吗? 我正在使用MySQL Workbench创建表,任何人都知道如何解决它?
我已经创建了一个MySql表。但是如果我将数据插入表中,则会出现问题。第二行的Mysql表ID为10
我的表行是这个样子
ID name
RS1 a
RS10 j
RS2 b
RS3 c
RS4 d
RS5 e
RS6 f
RS7 g
RS8 h
RS9 i
为什么ID是10号在第二行补充的吗? 我正在使用MySQL Workbench创建表,任何人都知道如何解决它?
我推测,要查询的表:
select t.*
from t
order by id;
此订单由id
在字母排序,而不是数字排序。由于“1”<“2”,“10”出现在“2”之前。
这里有一个简单的方法来解决这个问题:
select t.*
from t
order by length(id), id;
还有其他的方法,如:
order by substr(id, 3) + 0
该功能可将一切从第三个字符以后的号码,这是更适合分拣。
谢谢,这真棒回答 –
它正在按工作台排序为一个字符串。
除非需要在字符串值前添加id,否则如果您关心查看顺序,我建议您使用自动增量字段。如果它是一个数字(自动增量),这不会是一个问题。
如果您想按时间顺序排序,还可考虑使用created
或created_at
DateTime
字段。
我的猜测是你是在一个Windows操作系统上,这是我经常遇到的这个字符串排序问题与预期不符的地方。
你如何查询数据?记住:SQL表代表*无序*集。没有固有的顺序。您需要的任何顺序都使用'ORDER BY'明确提供。 –
你在Windows吗?请记住,这不是一个数字,而是一个字符串,因此它是如何对列进行排序的。另外,正如指出的那样,表并不固有地排序...工作台可能会为你做这种排序并使用Windows字符串排序... – Jarvis