MySql 排序规则

这篇具有很好参考价值的文章主要介绍了MySql 排序规则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、MySQL的排序规则是干什么的?

我们在使用 Navicat for MySQL 或 MySQL Workbench 创建数据库的时候,除了数据库名称和字符集外,我们还可以设置 Collation【排序规则】 (当然我们也可以使用默认的排序规则),那么这里的排序规则到底是干什么的?

排序规则概念:是指对指定字符集下不同字符的比较规则。排序规则有以下特征:

它和字符集(CHARSET)相关

每种字符集都有多种它支持的排序规则

每种字符集都会默认指定一种排序规则为默认值。

排序规则作用:排序规则指定后,它会影响我们使用 ORDER BY语句查询的结果顺序,会影响到 WHERE条件中大于小于号的筛选结果,会影响 DISTINCT、GROUP BY、HAVING 语句的查询结果。另外,mysql 建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。总之,凡是涉及到字符类型比较或排序的地方,都和排序规则有关。

2、排序规则设置及优先级

2.1 排序规则设置

排序规则设置可以分为:MySQL实例级别、库级别、表级别、列级别以及SQL指定。

2.1.1 MySQL实例级别设置

实例级别的排序规则设置就是 MySQL 配置文件或启动指令中的 collation_connection 系统变量。

实例级别设置排序规则

可以通过修改mysql的配置文件 my.ini来修改相应的排序规则,修改好后,重启mysql服务。

查看MySQL实例级别的字符集和排序规则

show variables like '%character%';

show variables like '%collation%';

从上图可以看到,当前实例级别的字符集是 utf8,排序规则是 utf8-general_ci。

2.1.2 库级别设置

库级别设置排序规则

在创建数据库的时候指定数据集和排序规则

CREATE DATABASE TESTDB         

DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 

查看库级别排序规则

show create database testdb;

2.1.3 表级别设置

表级别设置排序规则

在创建表的时候指定表的数据集和排序规则

use testdb;

CREATE TABLE user(

  `id` int(11) NOT NULL,

  `name` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

查看表级别排序规则

show table status from testdb like 'user';

-- testdb 为数据库名, user 为要查看的表名

2.1.4 列级别设置

列级别设置排序规则

在创建表的时候指定列的数据集和排序规则

CREATE TABLE `user` (

  `id` int(11) NOT NULL,

  `name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

查看列级别排序规则

show full columns from user;

2.1.5 SQL指定设置

SQL语句中指定排序规则

SELECT id, name FROM `user`

ORDER BY name COLLATE utf8mb4_unicode_ci;

2.2 排序规则优先级

优先级顺序是 SQL语句 > 列级别设置 > 表级别设置 > 库级别设置 > 实例级别设置

也就是说,如果SQL语句中指定了排序规则,则以其指定为准,否则以下一级为准(也就是列级别),如果列级别没有指定,默认是继承表级别的设置,以此类推。

3、几种常用排序规则介绍

我们以字符集utf8mb4为例,常用的排序规则有:utf8mb4_general_ci、utf8mb4_bin、utf8mb4_unicode_ci。

3.1 utf8mb4_general_ci

ci即case insensitive,不区分大小写。没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。另外,在比较和排序的时候速度更快。

3.2 utf8mb4_bin

将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

3.3 utf8mb4_unicode_ci

不区分大小写,基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法,所以兼容度比较高,但是性能不高。文章来源地址https://www.toymoban.com/news/detail-470649.html

到了这里,关于MySql 排序规则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是tomcat?tomcat是干什么用的?

    什么是tomcat Tomcat是常见的免费的web服务器. Tomcat 这个名字的来历,Tomcat是一种野外的猫科动物,不依赖人类,独立生活。 Tomcat的作者,取这个名字的初衷是希望,这一款服务器可以自力更生,自给自足,像Tomcat这样一种野生动物一般,不依赖其他插件,而可以独立达到提供

    2023年04月11日
    浏览(51)
  • python cv2是什么,可以用来干什么

    OpenCV (Open Source Computer Vision Library) 是一个流行的开源计算机视觉库,提供了丰富的图像和视频处理功能。通过使用 OpenCV 的 Python 绑定库 cv2,可以实现以下一些功能: 图像读取和显示:使用 cv2.imread() 读取图像文件,使用 cv2.imshow() 显示图像窗口。 图像处理:包括图像滤波、

    2024年02月14日
    浏览(44)
  • Hessian 矩阵汉语叫什么名字,是什么意思,是用来干什么的?

    问题描述:Hessian 矩阵汉语叫什么名字,是什么意思,是用来干什么的? 问题解答: Hessian 矩阵的汉语名字是“黑塞矩阵”或“海森矩阵”。 这个名字的来源是对德国数学家Ludwig Hessian(海森)的姓氏的翻译。Hessian 矩阵是一个方阵,其中的元素是一个函数的二阶偏导数,用

    2024年01月22日
    浏览(53)
  • node.js是干什么的

    Node.js是一个开源和跨平台的JavaScript运行时环境。它几乎是任何类型项目的流行工具! Node.js在浏览器之外运行V8 JavaScript引擎(Google Chrome的内核)。这使得Node.js的性能非常好。 Node.js应用程序在单个程序中运行,无需为每个请求创建新的线程。Node.js在其标准库中提供了一组异

    2023年04月09日
    浏览(43)
  • 在线ios免签是干什么的?

    在本教程中,我们将介绍在iOS设备上实现免签名应用程序安装的原理和详细步骤。首先,请注意,这些应用程序通常可能存在风险,因为它们没有经过苹果官方的签名审核。但是,现实中确实有一些情况,您可能需要安装一些非官方渠道的iOS应用。在这种情况下,下面的内容

    2024年02月07日
    浏览(46)
  • SpringBoot 配置文件:什么是配置文件?配置文件是干什么?

    学习一个东西,我们先要知道它有什么用处。整个项目中所有重要的数据都在配置文件中配置,例如:数据库的连接信息、项目启动窗口、第三方系统调用密钥、日志等级…,如果没有配置信息,那么 SpringBoot 项目就无法连接数据库,不能保存关键日志,因此,在项目中,配

    2024年02月16日
    浏览(45)
  • 路由器是什么东西?路由器是干什么用的?

    路由器是什么东西?虽然这个问题对于大多数人来说都不是一个问题,但是任然有少数缺乏网络基础的朋友,不知道路由器到底是个什么东西,本文就简单的介绍一下。 路由器(Router),是连接局域网与局域网、局域网与广域网(Internet)的一种设备,它会根据信道的情况自

    2024年02月08日
    浏览(41)
  • DNS劫持是什么意思?DNS劫持是干什么用的?

    DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。 DNS劫持原理 我们以用户访问淘宝网:www.taobao.

    2024年02月08日
    浏览(44)
  • WAF是干什么的 有哪些功能

    Web应用防火墙简称:WAF(Web Application Firewall,Web应用防火墙),很多人不了解WAF是干嘛的,WAF的功能有哪些,以及WAF的应用场景!接下来小情给大家说一说! WAF是Web应用防火墙(Web Application Firewall)的简称,Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为W

    2024年02月15日
    浏览(53)
  • 国外的大龄程序员在干什么?

    在Quora有个帖子: 我今年35岁了,是不是太老了,没法加入Google, Facebook, Microsoft 或者 Apple了? 下面的回复让人叹为观止,我摘录几个: 萨特南·辛格  Google软件工程师 (2017–present) 不,我在51岁的时候加入了Google ,我们团队还有几个比我年长的人!他们都是非常卓越的软件

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包