MySql 排序规则

2023-10-27

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排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法,所以兼容度比较高,但是性能不高。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySql 排序规则 的相关文章

  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 选择CentOS还是Ubuntu?

    Ubuntu和CentOS都是常见的Linux发行版 它们都有其优点和适用场景 Ubuntu是一种易于使用的操作系统 适合初学者 它具有良好的社区支持和广泛的软件库 因此很容易找到和安装需要的软件 Ubuntu还经常更新软件包 提供新功能和
  • UTXO介绍

    什么是UTXO 在比特币钱包当中 我们通常能够看到账户余额 然而在中本聪设计的比特币系统中 并没有余额这个概念 比特币余额 是由比特币钱包应用派生出来的产物 中本聪发明了UTXO交易模型 并将其应用到比特币当中 UTXO Unspent T
  • 怎样在html中写css样式,hbuilder的css怎么写

    HBuilder怎么查框架的css的属性 HBuilder在用框架时怎么查框架的css的属性 1 js中定义的变量和函数 在引用变量或函数时 可以跳转到定义的位置 包括HTML中同文件内部跳转及HTML向js文件的跳转 2 css中定义的样
  • Java开发工具JDK+IDEA+MySql+maven+tomact+sqlyong+postMan+redis+RMQ+node

    开发工具 JDK 1 8 含1 8中文API 链接 https pan baidu com s 1t43L4nxCqzmCIhKp JZvIg 提取码 9woy 开发工具 IDEA 含解密文档 链接 https pan baidu com
  • Unity普通项目升级为URP通用渲染管线(图文详解)

    Unity普通项目升级为URP通用渲染管线 前言 一 导入Universal RP 二 创建Pipeline Asset 三 设置Graphics 四 更改Rendering 五 素材升级URP 总结 版权声明 前言 我的unity版本是2
  • RASP解决Java安全问题探讨

    Java 语言在应用场景下有更健全的性能 对于很多企业而言是应用程序编写选择中的 Plan A 树大招风 这也使得它成为攻击者重点关注的对象 在软件开发的过程中 程序员通常会引入第三方库提高自己的研发效率 但开源代码的安全性和可靠性很难保证
  • 租用Topaz Video Enhance AI

    智星云算力平台已认证帐号在智星云租赁并使用Topaz Video Enhance AI 1 租用win10渲染镜像 2 设备管理器 查看显卡状态 3 安装 Topaz Video Enhance AI 软件 4 在 preferences
  • ATM(异步传输模式)是什么?

    异步传输模式 ATM 也称为信元中继 在固定大小的信元中传输数据 通过光纤或双绞线电缆 高速交换 在OSI模型的数据链路层 第2层 运行基于ITU T宽带综合业务数字网络 B ISDN 标准的网络技术 该标准是电信业开发的 自动取款机可以同
  • 【区块链论文整理】SIGMOD 篇 (二)

    SIGMOD Special Interest Group On Management Of Data 是数据库三大顶会之一 近几年也发表了不少水平很高的文章 本文主要针对SIGMOD会议中区块链相关的论文进行简单整理 ACM SIGMOD
  • 运算符之 --- 取余运算 %

    取模运算 javascript取模运算是一个表达式的值除以另一个表达式的值 并返回余数 取模在js里就是取余数的意思 a b 是求余数 a b 是求商 Math abs x 是求x的绝对值 12除以5 2 余数是2 即5 2 2 12 所以
  • C++:使用private继承

    在通常的程序设计中很少使用private继承 因为private继承其实相当于 根据某物实现 而这种情况应该通过类成员变量的方式来实现 那么private继承其实只有两个使用场景 1 需要重写虚函数 include
  • MobileSAM:更快的分割一切!面向移动端的轻量级SAM,比FastSAM快4倍!

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 点击进入 gt 图像分割和Transformer 交流群 转载自 极市平台 作者 happy 导读 本文提出一种 解耦蒸馏 方案对SAM的ViT H解码器进行蒸馏 同时
  • 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2,ShuffleNetV2,MobileNetV3

    v1 Going deeper with convolutions Inception v1的网络 主要提出了Inceptionmodule结构 1 1 3 3 5 5的conv和3 3的pooling组合在一起 最大的亮点就是从NIN N
  • Dart编程语言概览

    Dart编程语言概览 一个简单的Dart程序 注释 单行 多行 数据类型 字面量 输出方式 字符串插值 main 函数 特定的顶级函数 定义变量var 通过这种方式定义变量不需要指定变量类型 定义一个函数 printInteger int
  • 关于RocketMQ的启动时遇到的一些问题及解决方法

    对于RocketMQ的启动需要配置java环境 所以我们需要在linux上下载jdk 并配置JAVA HOME 配置java环境时遇到的文件不能编辑的问题 我们可以看到该文件对于我们来说是只读权限 所以我们需要提升权限用sudo编辑该文件
  • 特征工程系列:GBDT特征构造以及聚类特征构造

    特征工程系列 GBDT特征构造以及聚类特征构造 本文为数据茶水间群友原创 经授权在本公众号发表 关于作者 JunLiang 一个热爱挖掘的数据从业者 勤学好问 动手达人 期待与大家一起交流探讨机器学习相关内容 0x00 前言 数据和特征决定
  • 面试前看过这篇文章就好了

    一 java基础面试 1 1面向对象和面向过程的区别 面向过程 优点 性能比面向对象高 因为类调用时需要实例化 开销比较大 比较消耗 资源 应用场景 单片机 嵌入式开发 Linux Unix 缺点 没有面向对象易维护 易复用 易扩展 面向对
  • JDK8新特性-Function接口与BiFunction接口

    Function 接口 JDK8新增的函数式接口 接口只有一个抽象方法apply 接受一个T类型参数 返回一个R类型参数 T R表示泛型 可以相同 除了一个抽象的apply方法之外 Function存在两个默认的default方法 comp
  • 面试-Java【之】HashMap原理,源码逐行分析,理论总结(变量、常量、数据结构、Node、TreeNode、初始化、添加、查询、更新、删除)

    面试 Java 之 HashMap原理 源码逐行分析 理论总结 变量 常量 数据结构 Node TreeNode 初始化 添加 查询 更新 删除 1 源码分析 1 HashMap属性与变量 扩容因子 扩容阈值 结构转换阈值 2 Node 链
  • MySql 排序规则

    1 MySQL的排序规则是干什么的 我们在使用 Navicat for MySQL 或 MySQL Workbench 创建数据库的时候 除了数据库名称和字符集外 我们还可以设置 Collation 排序规则 当然我们也可以使用默认的排序规