我将数字以VARCHAR的形式保存到MySQL数据库中.由于其他一些情况,我不能把它们改成INT.

它是在排序时将它们作为字符而不是数字.

在我的数据库里

1 2 3 4 5 6 7 8 9 10...

在我的页面上,它显示如下有序列表:

1 10 2 3 4 5 6 7 8 9

我如何让它看起来按数字升序排列?

推荐答案

如果可能,如果只存储数字,则应将列的数据类型更改为数字.

如果你做不到这一点,那么用

select col from yourtable
order by cast(col as unsigned)

或者implicitly,比如一个数学运算,强制转换成数字

select col from yourtable
order by col + 0

顺便说一句,MySQL从左到右转换字符串.例如:

string value  |  integer value after conversion
--------------+--------------------------------
'1'           |  1
'ABC'         |  0   /* the string does not contain a number, so the result is 0 */
'123miles'    |  123 
'$123'        |  0   /* the left side of the string does not start with a number */

Mysql相关问答推荐

MySQL InnoDB:可以在没有回滚损失的情况下从运行的查询中进行大型插入吗

慢查询日志(log)甚至包括快速查询,因为它包括等待锁定所花费的时间

PythonAnywhere中SSH到MySQL数据库无限期挂起,SSH正确,workbench可以完美连接

将 GORM 与自定义连接表和外键结合使用

MySQL如何在触发器内部 Select 多行然后插入它们

是否可以使用以EXPLAIN EXTENDED ...开头的 SQL 语句修改数据?

MySql SELECT 查找包含数字的区间的时间复杂度是多少?

创建 mySQL BEFORE/AFTER UPDATE 触发器

如何查找列的所有值都相同的行?

MYSQL:如何根据之前的相关记录获取记录

在 where 子句中左连接多个值

按长度过滤 varbinary 字段

显示值为空的所有列名

如何将表的链接列转换为 SQL 中的行?

如何在 MySQL 上一次删除一系列记录?

使用 mysql 处理非常大的数据

ON UPDATE RESTRICT 有什么作用?

cron 启动的 mysqldump 和密码安全

CodeIgniter:如何进行 Select (不同的字段名)MySQL 查询

以二进制形式插入和 Select UUID(16)