问题描述
由于某种原因导致数据表的某个字段采用的是字符来存贮数字,对这个字段排序的时候,就会出现并非按照数字大小进行排序;
错误演示
解决方案
(1)直接在需要排序的数字字符串后面加*1 或者 +0
SELECT * FROM `bz_exam_weight` ORDER BY accuracy*1 DESC
(2)使用CAST( 数据 as 类型 )或 CONVERT(数据,类型 )函数。
SELECT * FROM `bz_exam_weight` ORDER BY CAST(accuracy AS SIGNED) DESC;
结果
知识拓展
(1) MYSQL **CAST( 数据 as 类型 )或 CONVERT(数据,类型 )**函数使用
函数 | 类型 |
---|---|
CHAR( ) | 字符型 |
DECIMAL(数值长度, 精度/小数点保留长度) | 浮点型(float) |
SIGNED | 整数型(int) |
DATE | 日期 |
TIME | 时间 |
DATETIME | 日期时间型 |
(2) MYSQL 字符排序规则
这里指定的字符集为"utf8"(utf8mb3),排序规则"utf8_general_ci";
(1) MySQL UTF8(utf8mb3) 常用字符排序规则
排序规则 | 描述 |
---|---|
utf8_general_ci | 不区分大小写,默认排序规则 |
utf8_general_cs | 区分大小写 |
utf8_bin | 区分大小写,字符串每个字符串用二进制数据编译存储,且支持存储二进制数据 |
(2) MySQL utf8mb4 常用字符排序规则
排序规则 | 描述 |
---|---|
utf8mb4_bin | 区分大小写,将字符串每个字符用二进制数据编译存储,区分e和é这类字符 |
utf8mb4_general_ci | ci即case insensitive,不区分大小写,不区分e和é这类字符,默认排序规则 |
utf8mb4_unicode_ci | 不区分大小写,能够在各种语言之间精确排序,不区分e和é这类字符 |
utf8mb4_general_cs | 区分大小写,不区分e和é这类字符 |