KingbaseES V8R6运维案例之---MySQL和KingbaseES字符串排序规则对比

news2024/11/15 19:37:46

案例说明:
相同数据排序后查询,在MySQL和KingbaseES下得到的排序顺序不一致,本案例从MySQL和KingbaseES的排序规则分析,两种数据库排序的异同点。适用版本: KingbaseES V8R6、MySQL 8.0

一、MySQL的排序规则1、排序规则(collation)
排序规则是依赖于字符集,字符集是用来定义MySQL存储不同字符的方式,而排序规则一般指对字符集中字符串之间的比较、排序制定的规则。一种字符集可以对应多种排序规则,但是一种排序规则只能对应指定的一种字符集,两个不同的字符集不能有相同的排序规则。

上图中,Collation 列表示排序方式,Charset 列表示字符集,可以看出 utf8 字符集对应着许多的排序方式,排序方式那一列每一项的值都不一样,并且每一项都对应唯一一种字符集,在这里是 utf8 字符集。

2、默认排序规则(字符集的默认排序规则)
每种字符集都有一个默认的排序规则, 可以通过下面的SQL语句查询指定字符集的默认排序规则:

mysql> show character set like 'utf8%';
+---------+---------------+--------------------+--------+
| Charset | Description   | Default collation  | Maxlen |
+---------+---------------+--------------------+--------+
| utf8    | UTF-8 Unicode | utf8_general_ci    |      3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci |      4 |
+---------+---------------+--------------------+--------+
2 rows in set (0.00 sec)

上面的例子是查询字符集前缀包含utf8的默认排序方式,从中可以得知:

utf8字符集的默认排序方式是 utf8_general_ci 字符集中字符最大长度占3个字节
utf8mb4 字符集的默认排序方式是 utf8mb4_general_ci 字符集中字符最大长度占4个字节

3、指定数据库和表字符集及排序规则

1)指定数据库字符集和排序规则

mysql> create database prod1 
       CHARACTER SET =utf8  COLLATE=utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.01 sec)

mysql> select SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME
    ->  from INFORMATION_SCHEMA.SCHEMATA
    ->  where SCHEMA_NAME='prod1';
+-------------+----------------------------+------------------------+
| SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+-------------+----------------------------+------------------------+
| prod1       | utf8                       | utf8_general_ci        |
+-------------+----------------------------+------------------------+
1 row in set (0.00 sec)

2)指定表字符集和排序规则

mysql> create table t1 (id int)
    -> ENGINE=InnoDB DEFAULT CHARSET=utf8 collate=utf8_general_ci ;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> show create table t1 \G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)

4、查看表的字符集和排序规则

1)字符集为utf8mb4(默认排序规则)

mysql> show create table bdsj_bdgl_test\G
*************************** 1. row ***************************
       Table: bdsj_bdgl_test
Create Table: CREATE TABLE `bdsj_bdgl_test` (
  `BDSJ_BDGL_NM` varchar(32) NOT NULL,
  `BDSJ_BDGL_BDBH` varchar(32) DEFAULT NULL,
  `BDSJ_BDGL_BDLJ` varchar(256) DEFAULT NULL,
 ......
  PRIMARY KEY (`BDSJ_BDGL_NM`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

如下图所示,(CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci)排序规则:

2)字符集为utf8(默认排序规则)

mysql> show create table bdsj_bdg2_test\G
*************************** 1. row ***************************
       Table: bdsj_bdg2_test
Create Table: CREATE TABLE `bdsj_bdg2_test` (
  `BDSJ_BDGL_NM` varchar(32) NOT NULL,
  `BDSJ_BDGL_BDBH` varchar(32) DEFAULT NULL,
  `BDSJ_BDGL_BDLJ` varchar(256) DEFAULT NULL,
  .......
  PRIMARY KEY (`BDSJ_BDGL_NM`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

如下图所示,(CHARSET=utf8 )默认排序规则:

二、KingbaseES排序规则1、排序规则(collation)
排序规则定义中有一个提供程序 , 它指定哪个库提供语言环境数据。一个标准的提供者名称是 libc , 它使用操作系统C库提供的语言环境。这些是操作系统提供的大多数工具使用的语言环境, 不同操作系统的 libc 版本不同可能会导致排序顺序略有不同。另一个提供者是 icu ,它使用外部ICU库。 只有在构建KingbaseES时配置了对ICU的支持,才能使用ICU区域设置。
libc 提供的排序规则对象映射到 setlocale() 系统调用接受的 LC_COLLATE 和 LC_CTYPE 设置的组合。 (正如其名字,一个排序规则的主要目的是设置 LC_COLLATE ,它控制排序顺序。 但是在实际中,很少有将 LC_COLLATE 设置成与 LC_CTYPE 不同,因此在同一个概念下收集这些设置比创建另一个基础结构来设置每一个表达式的 LC_CTYPE更加方便)。 此外,一个 libc 排序规则是和一个字符集编码(见 字符集 )绑定在一起的。 相同的排序规则名字可能存在于不同的编码中。如下图所示,数据库字符集和对应的排序规则:

2、指定数据库的字符集

test=# create database prod2
test-# WITH ENCODING 'utf8' lc_collate='en_US.UTF-8' lc_ctype='en_US.UTF-8';
CREATE DATABASE

test=# \l prod2
                             List of databases
 Name  | Owner  | Encoding |   Collate   |    Ctype    | Access privileges
-------+--------+----------+-------------+-------------+-------------------
 prod2 | system | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
(1 row)

3、查看表数据排序

  • 表结构信息

  • 字符集为utf8,collate为ci_x_icu的排序:
    1)数据库字符集
    2)字段排序信息

  • 字符集为utf8,collate为en_US.UTF-8的排序:
    1)数据库字符集
    2)字段排序信息

三、总结
在数据库中,字符串(character)类型的字段数据在排序时,从左到右一个一个字符的进行比较, 按照数据库或表及字段的排序规则进行排序。通过对MySQL和KingbaseES字符串类型的排序比较,可以获取以下结果:

本文简单对比了MySQL和KingbaseES的排序规则,需要更深入了解数据库的排序,可以参考相关数据库的官方文档说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/510106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

各种预训练模型的理论和调用方式大全

诸神缄默不语-个人CSDN博文目录 本文主要以模型被提出的时间为顺序,系统性介绍各种预训练模型的理论(尤其是相比之前工作的创新点)、调用方法和表现效果。 最近更新时间:2023.5.10 最早更新时间:2023.5.10 BertRobe…

上海亚商投顾:沪指缩量调整跌超1% 新能源车产业链掀涨停潮

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 大小指数今日再度分化,沪指低开低走,午后一度跌超1.5%,创业板指则拉升涨超1%&a…

nodejs安装和环境配置-Windows

0.安装过程中遇到的常见问题 访问:https://blog.csdn.net/weixin_52799373/article/details/125718587?spm1001.2014.3001.5502 1.下载node.js 下载地址: https://nodejs.org/en/ 2.安装 2.1 安装 其实就是无脑下一步,第三步的时候可以选择自定义目…

springboot配置文件加载顺序, java启动参数优先级

搜索: "spring boot 外化配置" Spring Boot Reference Guide Spring Boot 中文文档 参考手册 中文版 SpringBoot中配置文件加载位置与优先级_apllication 配置文件项目启动时加载参数_流烟默的博客-CSDN博客 SpringBoot的外部化配置最全解析!_广州建站小戴BOTAO博…

k8s之HPA(Pod水平自动伸缩)

1.hpa介绍 HPA是根据指标来进行自动伸缩的,目前HPA有两个版本–v1和v2beta HPA的API有三个版本,通过kubectl api-versions | grep autoscal可看到 kubectl api-versions | grep autosca autoscaling/v1 autoscaling/v2beta1 autoscaling/v2beta2 查看使…

Uboot源码目录分析

在分析uboot源码之前一定要在Ubuntu中编译一下uboot源码,因为编译过程会生成一些文件,而生成的这些恰恰是分析uboot源码不可或缺的文件。 arch文件夹 存放和架构有关的文件,我们现在用的是ARM芯片,所以只需要关系arm文件夹即可 …

2.是人就能学会的Spring源码教学-Spring的简单使用

是人就能学会的Spring源码教学-Spring的简单使用 Spring的最简单入门使用第一步 创建项目第二步 配置项目第三步 启动项目 Spring的最简单入门使用 各位道友且跟我一道来学习Spring的最简单的入门使用,为了方便和简单,我使用了Spring Boot项目&#xff…

linux CentOs 安装 mysql8.0.30

心酸历程。。。 网上的各种教程都有各种bug,安了三个小时终于安好。现在奉上我的宝典秘籍。 第一步,去mysql官网下载,然后将下载的tar包放到linux里面,最好专门创建一个目录来存放,我放到了/usr/local/src的mysql目录下…

基于51单片机的简易电子秤

首先看看题目要求: 1.方案论证 (1)压力传感器的论证与选择 方案一:采用惠更斯电桥,当电阻应变片承受载荷产生变形时,其阻值将发生变化。从而使电桥失去平衡,产生相应的差动信号,但…

Jenkins入门系列之Gitlab账号登录

目录 背景步骤1. 安装插件2. Gitlab 配置3. Jenkins 配置4. 验证 背景 版本 Jenkins Version:Jenkins 2.403Gitlab Version: Gitlab 15.6部署环境:群晖NAS Docker 部署JenkinsGitlab Jenkins 默认使用的是自带的数据库,支持LDAP&#xff0…

【C++】-类和对象之初始化列表(explicit的简单介绍)(下)

💖作者:小树苗渴望变成参天大树 ❤️‍🩹作者宣言:认真写好每一篇博客 💨作者gitee:gitee 💞作者专栏:C语言,数据结构初阶,Linux,C 文章目录 前言 前言 经过前面的好几篇博客,大家应…

SpringSecurity自定义实现手机短信登录

SpringSecurity自定义登录验证-手机验证码登录 其实实现原理上跟账号密码登录一样的 1、自定义短信验证Token 定义一个仅使用手机号验证权限的鉴权Token,SpringSecurity原生的UsernamePasswordAuthenticationToken是使用username和password,如下图 pr…

向量时钟算法

向量时钟不仅同步本进程的时钟值,而且还同步已知的其他进程时钟值 分布式系统中每个进程Pi保存一个本地逻辑时钟向量值VCi,VCi(j)代表进程Pi知道的进程Pj的本地逻辑时钟值 初始化VCi向量为[0,…]进程Pi每发生一次事件,VCi[i]加一进程Pi给进…

应付模块无法关账问题 APP-AR-11332 您必须在关闭此期之前过账其中的所有事务处理

问题描述 AR关账时遇到了这个问题,根本原因是,因为用户录入另一个贷项的发票,做过核销,后来又取消了核销,未创建会计分类,未传送总,不想要这个贷项发票了,前台删除不了,…

经验分享,api 接口设计原则有这几条

结合我多年在 API 行业摸爬滚打的经验,我总结了一下,API 接口设计原则有这几条: 接口设计应该简单易用,易于理解和使用; 接口设计应该支持多种格式,如JSON、XML等; 接口设计应该支持多种请求方…

渲染速度慢,使用云渲染会快多少?

设计师在使用软件制作效果图和动画师在制作动画时,其中有一个比较关键的环节就是渲染成像,渲染的效率主要跟使用的电脑显卡或CPU性能有关,如果性能太低,渲染的速度会很慢,拉长了项目整体的交付周期,云渲染速…

Vite + Vue3 实现前端项目工程化

Vue3 发布至今,周边的生态、技术方案已足够成熟,个人认为新项目是时候切换到 Vite Vue3 了。今天就给大家操作一下这种技术方案实现前端工程化。 1. 初始化项目 通过官方脚手架初始化项目 第一种方式,这是使用vite命令创建,这种…

FM33A048B SPI1/2

概述 芯片的2 个SPI 接口模块SPI1 和SPI2,可配置为主设备或从设备,实现与外部的SPI 通信。 特点: ⚫ 全双工3线串行同步收发 ⚫ 2路独立通道 ⚫ 主从模式 ⚫ 可编程时钟极性和相位 ⚫ 可编程比特速率 ⚫ 从模式最大频率为FAHBCLK/2 ⚫ 传输结…

Hello算法——笔记

文章目录 1 引言算法数据结构算法和数据结构的关系 2 复杂度分析时间复杂度空间复杂度 3 数据结构数据与内存数据结构分类 4 数组与链表 参考资料 1 引言 算法 算法是一组用于解决特定问题或执行特定任务的明确定义的计算步骤或指令集合。算法可以被视为一种解决问题的方法或…

【iOS】--手势操作

文章目录 UIGestureRecognizer 的继承关系: 使用手势步骤UIPanGestureRecognizer(拖动)UIPinchGestureRecognizer(拖动)UIRotationGestureRecognizer(旋转)UITapGestureRecognizer(点按&#xf…