mysql多条件排序查询
概述数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法。除了对数据进行过滤,我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字段做...
2024.11.22MySQL新建数据库时,字符集和排序规则如何选择?本文来简单总结一下。
字符集与排序规则
一、字符集字符集:就是用来定义字符在数据库中的编码的集合。常见的字符集:utf8、Unicode、GBK、GB2312(支持中文)、ASCCI(不支持中文)
通常,为了统一前后端编码,尤其是设计到源代码、页面文件、页面输入以及数据库字符集等,若不相统一,往往会照成莫名其妙的乱码现象。现在很多工具都默认为utf8,所以,若无特别需求,一般就用utf8就足矣了 。我这里用的是utf8字符集。
二、字符集排序规则我们在创建mysql数据库是,通常还有一个选项,就是选择数据库的排序规则。类似如下:
数据库字符集及排序规则
本人用的是utf8_general_ci。简单介绍一下。
后缀ci (case insensitive)意味不区分大小写(大小写不敏感),后缀cs (case sensitive)区分大小写(大小写敏感)utf8_bin 规定每个字符串用二进制编码存储,区分大小写,可以直接存储二进制的内容如在ci情况下:select name,age from user; 等价于select NAME,AgE FROM user; 大小写字符判断是一样的而在cs情况下:假设字段名严格为name, age,表名:User。那么就必须:select name,age from User; 大小写字符判断有区分而bin意思是二进制,所以小写u和大写U会被区别例如你运行:select name FROM UseI WHERE name = ‘Solo‘那么在utf8_bin中你就找不到 name = ‘solo‘ 的那一行, 在utf8_general_ci 下可以。1. utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。
2. utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会照成不良后果
3. utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容
查询示例
utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。utf8_general_ci校对速度快,但准确度稍差。utf8_unicode_ci准确度高,但校对速度稍慢。utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci就可以了。 如果应用有德语、法语或者俄语,请一定使用utf8_unicode_ci;否则 utf8_general_ci 就够了,
总结排序规则是指对特定字符集下不同字符的比较规则。确定排序规则后,才可以在一个字符集上比较字符之间的大小关系。每个排序规则唯一对应一种字符集,但是一个字符集可以对应多种排序规则,其中一个是默认排序规则。也可以简单的理解为,排序规则,就是指字符比较时是否区分大小写,以及是按照字符编码进行比较还是直接用二进制数据比较。概述数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法。除了对数据进行过滤,我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字段做...
2024.11.22死锁问题 共享间隙锁引起的死锁 如何产生共享间隙锁 何时产生的隐式锁转换问题现象在一个事务内只会锁一行的数据,没有锁多行数据才会出现的顺序问题,但是会偶尔报个Deadlock事务内sql执行顺序...
2024.11.20说明Web应用程序,MySQL数据库,数据库中有三张表:health_patient(病人表)、health_patient_account(病人账户表)、health_patient_medical...
2024.11.20概述在使用order by时,经常出现Using filesort,所以对于此类sql语句我们需要去尽力优化,使其尽量使用Using index。那么,我们对于这类型的语句我们怎么去做优化呢?因为这一...
2024.11.22在编写SQL 语句时常常会用到 order by 进行排序,那么排序过程是什么样的?为什么有些排序执行比较快,有些排序执行很慢?又该如何去优化?索引排序索引排序指的是在通过索引查询时就完成了排序,从而...
2024.11.21