解析 MySQL 与 KingbaseES 字符串排序规则差异
一、排序规则的核心概念:字符集的 “排序说明书”
二、MySQL 8.0 的字符串排序规则体系
1. 核心特性:字符集与默认排序规则
show character set命令查询。最常用的 UTF-8 相关字符集规则如下:| 字符集 | 默认排序规则 | 最大字符长度 | 适用场景 |
|---|---|---|---|
| utf8 | utf8_general_ci | 3 字节 | 常规中文、英文场景(不支持 Emoji) |
| utf8mb4 | utf8mb4_0900_ai_ci(MySQL 8.0 默认) | 4 字节 | 需支持 Emoji、特殊符号的场景 |
utf8_general_ci的 “ci” 代表 “Case-Insensitive”(大小写不敏感),排序时会忽略大小写差异;而utf8mb4_0900_ai_ci是 MySQL 8.0 对 utf8mb4 字符集的优化规则,基于 Unicode 9.0 标准,排序精度更高。2. 排序规则的层级指定与查看
(1)指定数据库级字符集与排序规则
CHARACTER SET和COLLATE关键字明确规则,示例如下:-- 创建使用utf8字符集、utf8_general_ci排序规则的数据库prod1
CREATE DATABASE prod1
CHARACTER SET = utf8
COLLATE = utf8_general_ci;-- 验证数据库排序规则
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'prod1';
prod1数据库的默认字符集为utf8,排序规则为utf8_general_ci。(2)指定表级字符集与排序规则
-- 创建使用utf8mb4字符集、utf8mb4_0900_ai_ci排序规则的表t1
CREATE TABLE t1 (id INT,bdbh VARCHAR(32) -- 字符串字段将继承表的排序规则
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- 查看表的排序规则
SHOW CREATE TABLE t1 \G
SHOW CREATE TABLE可确认表的DEFAULT CHARSET和COLLATE配置,若未指定COLLATE,则自动使用字符集的默认排序规则。3. 实际排序效果示例
BDSJ_BDGL_BDBH(存储格式如 “ZNLKJZGKPT_HUICHU_V1.1.6”)为例,不同字符集的排序结果差异显著:- utf8mb4 字符集(默认 utf8mb4_0900_ai_ci):排序时优先识别 “.”“_” 等符号,数字后缀按自然顺序排列,结果为:
ZNLKJZGKPT HUICHU V1.1.6 → ZNLKJZGKPT HUICHU V1.1.6_27 → ZNLKJZGKPT_HUICHU_V1.1.6_YZ27 → ... → ZNLKJZGKPT_HUICHU_V1.1.6.10_YZ27 - utf8 字符集(默认 utf8_general_ci):排序时对符号的优先级处理不同,数字后缀排序更 “紧凑”,结果为:
ZNLKJZGKPT_HUICHU_V1.1.6 → ZNLKJZGKPT_HUICHU_V1.1.6.1 → ZNLKJZGKPT_HUICHU_V1.1.6.10_YZ27 → ... → ZNLKJZGKPT HUICHU V1.1.6 YZ27
三、KingbaseES V8R6 的字符串排序规则体系
1. 核心特性:排序规则提供者与字符集绑定
- libc 提供者:依赖操作系统的 C 库(如 Linux 的 glibc),排序规则与操作系统的区域设置(Locale)一致(如
en_US.UTF-8),不同操作系统的 libc 版本可能导致排序差异。 - ICU 提供者:依赖外部 ICU(International Components for Unicode)库,排序规则不依赖操作系统,精度更高且跨平台一致(如
ci_x_icu),需在 KingbaseES 编译时开启 ICU 支持。
UTF8(对应 MySQL 的 utf8mb4,支持 4 字节字符)。2. 排序规则的配置与查看
(1)创建指定排序规则的数据库
-- 创建使用UTF8字符集、en_US.UTF-8排序规则(libc提供者)的数据库prod2
CREATE DATABASE prod2
WITH ENCODING 'UTF8'
lc_collate='en_US.UTF-8' -- 排序规则(LC_COLLATE)
lc_ctype='en_US.UTF-8'; -- 字符分类规则(LC_CTYPE,通常与lc_collate一致)-- 查看数据库排序规则
\l prod2 -- KingbaseES的元命令,类似MySQL的SHOW DATABASES
\l prod2会显示数据库的Encoding(UTF8)、Collate(en_US.UTF-8)和Ctype(en_US.UTF-8)。(2)查看表的排序规则与数据排序
\d 表名查看字段配置,再通过ORDER BY查询实际排序效果:-- 查看表bdsj_bdgl_test的字段配置
\d bdsj_bdgl_test;-- 查看排序结果(数据库prod2使用en_US.UTF-8规则)
SELECT BDSJ_BDGL_BDBH FROM bdsj_bdgl_test ORDER BY 1 ASC;
ci_x_icu(ICU 提供者)和en_US.UTF-8(libc 提供者)两种规则为例,排序效果差异如下:- ci_x_icu 规则:符号与数字的优先级处理接近 MySQL 的 utf8mb4_0900_ai_ci,排序结果更 “松散”,包含空格的字符串优先;
- en_US.UTF-8 规则:排序逻辑接近 MySQL 的 utf8_general_ci,字符串按 “字符 + 数字” 的紧凑顺序排列。
四、MySQL 与 KingbaseES 排序规则的核心差异与适配方案
1. 核心差异总结
| 对比维度 | MySQL 8.0 | KingbaseES V8R6 |
|---|---|---|
| 排序规则提供者 | 无(内置与字符集绑定) | 支持 libc(操作系统依赖)、ICU(跨平台一致) |
| 配置层级 | 数据库、表、字段均可指定 | 主要在数据库级指定(表 / 字段继承) |
| 默认字符集 | utf8mb4(MySQL 8.0) | UTF8(支持 4 字节字符,对应 MySQL 的 utf8mb4) |
| 符号优先级 | 随排序规则变化(如 utf8_general_ci 对 “_” 优先级低) | ICU 规则对符号优先级更高,libc 规则接近 MySQL |
2. 排序结果一致的适配方案
| 适配场景 | MySQL 配置 | KingbaseES 配置 | 适配原理 |
|---|---|---|---|
| 支持 Emoji / 特殊符号 | 字符集:utf8mb4
|
字符集:UTF8
|
两者均对 4 字节字符友好,且符号、数字的排序优先级一致 |
| 常规中文 / 英文场景 | 字符集:utf8
|
字符集:UTF8
|
libc 提供者的 en_US.UTF-8 规则,与 utf8_general_ci 的符号处理逻辑一致 |
3. 迁移与运维建议
- 迁移前规则确认:在 MySQL 中通过
SHOW CREATE DATABASE/SHOW CREATE TABLE确认现有字符集与排序规则,优先选择上述适配组合; - KingbaseES 库级配置优先:创建 KingbaseES 数据库时,明确指定
lc_collate(如ci_x_icu或en_US.UTF-8),避免依赖默认规则; - 数据验证:迁移后通过
ORDER BY查询关键字符串字段,对比双库结果(如抽样 100 条数据),确保排序一致; - 特殊场景处理:若字段包含自定义符号(如 “#”“@”),需单独测试排序效果,必要时通过
COLLATE关键字在 SQL 中强制指定排序规则(如ORDER BY bdbh COLLATE 'ci_x_icu')。
五、总结
相关新闻
完整教程:Redis 是如何实现消息队列的?
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
泛型通配符 T、E、K、V、?
转载自原文链接:blog.csdn.net/zhangyifang_009/article/details/151653376,遵循 CC 4.0 BY-SA 版权协议在Java后端开发中,你一定在写集合类或工具类时,见过 T、E、K、V、? 这样的泛型通配符。但你是否有过以下疑…
微软-SQLServer-2012-和-Hadoop-全-
微软 SQLServer 2012 和 Hadoop(全)原文:Microsoft SQL Server 2012 with Hadoop 协议:CC BY-NC-SA 4.0零、前言 数据管理需求已经从传统的关系型存储发展到关系型和非关系型存储,现代信息管理平台需要支持所有类…
最新新闻
全链路覆盖、稳定运行的领军企业方案:医疗行业数据分类分级落地实践
一、内容概要:全域数据治理赋能医疗行业合规与价值双升级提示:医疗数据合规治理已成为智慧医疗数字化落地的基础性刚需,标准化分级是平衡数据安全与业务赋能的核心技术手段。随着智慧医疗数字化建设持续深入,多源异构医疗数据已成…
Steam批量售卖终极指南:3分钟高效清空库存的免费方案
Steam批量售卖终极指南:3分钟高效清空库存的免费方案 【免费下载链接】Steam-Economy-Enhancer Enhances the Steam Inventory and Steam Market. 项目地址: https://gitcode.com/gh_mirrors/st/Steam-Economy-Enhancer 厌倦了在Steam上手动一件件售卖交易卡…
Flock-You Flask仪表盘详解:数据可视化与GPS坐标匹配技术
Flock-You Flask仪表盘详解:数据可视化与GPS坐标匹配技术 【免费下载链接】flock-you flock cam detection 项目地址: https://gitcode.com/gh_mirrors/fl/flock-you Flock-You是一款功能强大的监控设备检测工具,其核心功能在于通过Flask仪表盘实…
OpenEats高级技巧:管理员必备的用户管理与系统定制指南
OpenEats高级技巧:管理员必备的用户管理与系统定制指南 【免费下载链接】OpenEats :pizza: Self Hosted Recipe Management App :hamburger: 项目地址: https://gitcode.com/gh_mirrors/open/OpenEats OpenEats是一款功能强大的自托管食谱管理应用ÿ…
深度学习论文: Synthetic data generation framework for quality control automation in rotogravure printing
深度学习论文: Synthetic data generation framework for quality control automation in rotogravure printing Synthetic data generation framework for quality control automation in rotogravure printing PDF:https://arxiv.org/pdf/2607.21577 PyTorch代码: https://gi…
2026 成都黄金回收避坑完整版,标准流程搭配靠谱门店测评 - 日常比对手册
随着黄金市价持续波动,不少成都市民选择出手家中闲置黄金首饰、金条、金币等饰品变现。但成都本地黄金回收市场鱼龙混杂,不少小型商家和流动摊位存在虚高报价、克扣克重、隐形收费、临时压价等乱象,让普通消费者极易…
日新闻
ffmpeg-static 跨平台多媒体处理架构解析与技术实践
ffmpeg-static 跨平台多媒体处理架构解析与技术实践 【免费下载链接】ffmpeg-static ffmpeg static binaries for Mac OSX and Linux and Windows 项目地址: https://gitcode.com/gh_mirrors/ff/ffmpeg-static ffmpeg-static 项目为 macOS、Linux 和 Windows 三大主流操…
7步掌握KMS智能激活工具:Windows和Office永久激活完整方案
7步掌握KMS智能激活工具:Windows和Office永久激活完整方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款功能强大的智能激活脚本工具,专为Windows…
Linux 二进制分析利器:strings 命令从入门到实战全解
一、命令简介strings 命令用于在二进制文件、可执行文件、对象文件或任何数据文件中查找并提取可打印的字符串序列。它默认识别长度至少为 4 个字符的可打印 ASCII 字符串(以换行符或空字符终止)。该工具在逆向工程、调试和二进制文件分析中非常有用&…
周新闻
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集
Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…
智慧飞行 大疆无人机一站式智能管控平台/支持大疆机场/私有化部署 从航线规划、自动飞行、AI识别到数据管理,一个平台全搞定
智慧飞行-大疆无人机一站式智能管控平台/支持大疆机场/私有化部署 企业级全域智能无人机一体化管控平台源码! 专为电力巡检、安防监控、应急救援、测绘勘察等行业打造,让您的无人机舰队实现 “无人化、自动化、智能化” 管理! 🎯 …
揭秘ChatGPT+Mathematica协同教学:为什么92%的初学者在72小时内建立函数直觉?
更多请点击: https://codechina.net 第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
月新闻
[C++]内存管理:串顺序存储的内存回收
在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比
移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建
本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…