请教一下数据库字段是varchar,我们做排序的时候为啥999比1111大

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一下数据库字段是varchar,我们做排序的时候为啥999比1111大相关的知识,希望对你有一定的参考价值。

mysql字符集有关的有:
1. 数据库的的字符集
2. 文本字段( varchar , text ,char ) 的字符集
你指的是哪个呢?
以下例子以utf8为字符集(注意是utf8 不是 utf-8 )
建库时指定字符集: create database XXXX charset utf8
一旦在建库时指定了字符集,在建表时就可以不用指定字符集了,它会默认继承数据库的字符集。
如果建表时还想指定字符集:create table XXXX ( xxxxxxx ) type=MyISAM default charset utf8

create table XXXX ( aa varchar(8) charset utf8, bb char(4) charset utf8) type=MyISAM default charset utf8;
一旦设置了utf8为字符集,在读取时,特别是用作网页作为输出 和 从网页接受数据时,要注意:
1. 请将网页的编码设置为 utf-8 (请注意是 utf-8 不是 utf8 )
2. 在进行 数据库操作 之前请先执行一下SQL: set names utf8 , 然后再执行其它SQL语句

上面的思想是:请尽量保持所有的操作都用同一种编码。
参考技术A 你这个明显是按照id排序的,不是按照a或者b排序的。 参考技术B ‘9’的ASCII码大于 '1'呀本回答被提问者采纳

mysql varchar排序

今天遇到个问题,mysql order by  字段 ,如果字段是varchar形式,但是里面存的是数字的话,排序会认为他是string类型排序,如下:

1

11

12

13

14

..

19

2

20

21

..

 

当数字位数多的时候,排序更乱。

 

解决访问就是

order by (字段+0) desc 

 

这样,字段会被解析成数字的形式,所以可以正常的排序

以上是关于请教一下数据库字段是varchar,我们做排序的时候为啥999比1111大的主要内容,如果未能解决你的问题,请参考以下文章

PHP MYSQL 请教 2个字段能无限分类吗?

varchar类型字段排序混乱问题

mysql varchar排序

mysql 数据库中 ,按照字母加数字的字符串排序

使用 Jooq 在数值基础上按 varchar 字段(具有数值)对查询进行排序

Mysql数据库按照varchar字符串类型排序和按照int整型类型排序的区别和注意点及解决方案