我已經創建了一個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