我们在工作中设计表的时间经常会遇到排序字段的类型选择,是选择字符串类型,还是选择类型呢?还是有更好的选择呢?

下面我们要选择用字符串做为排序字段类型
创建表跟插入数据

创建表

插入数据
查询所以记录并排序
SELECT * from test_server ORDER BY sort ASC

执行查询并排序
从上图我们可以看出上面的排序是有问题,正确的排序应该是 1,2,4,12 而现在是1,12,2,4被当成字符串来比较了。
要怎么解决上面的问题呢?就是要把字符串转换为数值类型
1,sort+0后再排序

执行查询并排序
2,使用MySQL函数CAST/CONVERT
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型 可以是以下值其中的 一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

执行查询并排序

执行查询并排序
以方法虽然都可以解决这个问题,但是还我喜欢直接把sort字段设计为数值类型。一步到位,节省一些执行的时间。
修改表字段类型

修改表字段类型
执行查询并排序

执行查询语句
如果你还有什么好的方法可以在评论中留言交流谢谢大家。