2016-08-05 60 views
2

我已经创建了一个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创建表,任何人都知道如何解决它?

+0

你如何查询数据?记住:SQL表代表*无序*集。没有固有的顺序。您需要的任何顺序都使用'ORDER BY'明确提供。 –

+0

你在Windows吗?请记住,这不是一个数字,而是一个字符串,因此它是如何对列进行排序的。另外,正如指出的那样,表并不固有地排序...工作台可能会为你做这种排序并使用Windows字符串排序... – Jarvis

回答

1

我推测,要查询的表:

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 

该功能可将一切从第三个字符以后的号码,这是更适合分拣。

+1

谢谢,这真棒回答 –

0

它正在按工作台排序为一个字符串。

除非需要在字符串值前添加id,否则如果您关心查看顺序,我建议您使用自动增量字段。如果它是一个数字(自动增量),这不会是一个问题。

如果您想按时间顺序排序,还可考虑使用createdcreated_atDateTime字段。

我的猜测是你是在一个Windows操作系统上,这是我经常遇到的这个字符串排序问题与预期不符的地方。