1. 首页 > MySQL教程 > 正文

MySQL教程FG071-MySQL排序规则配置与使用

GF-MySQL

内容简介:本文主要介绍MySQL相关知识,包括安装、配置、优化等内容。风哥教程参考MySQL官方文档MySQL SQL Syntax、MySQL Server Administration。

Part01-基础概念与理论知识

1.1 什么是排序规则

排序规则(Collation)是字符集的一个属性,用于定义如何比较和排序字符串数据。排序规则决定了字符串的比较顺序、大小写敏感性以及重音符号的处理方式。

1.2 排序规则的组成

排序规则通常由以下部分组成:

  • 字符集名称
  • 语言/区域
  • 大小写敏感性(_ci 不区分大小写,_cs 区分大小写)
  • 重音敏感性(_ai 不区分重音,_as 区分重音)

Part02-生产环境规划与建议

2.1 查看服务器排序规则

示例: 01 更多视频教程www.fgedu.net.cn

-- 查看服务器排序规则配置
SHOW VARIABLES LIKE 'collation_%';
            

2.2 查看数据库排序规则

示例: 02 学习交流加群风哥微信: itpux-com

-- 查看数据库排序规则
SELECT schema_name, default_character_set_name, default_collation_name 
FROM information_schema.schemata 
WHERE schema_name = 'test';
            

2.3 查看表排序规则

示例: 03 学习交流加群风哥QQ113257174

-- 查看表排序规则
SHOW CREATE TABLE test_table;

-- 或使用信息模式
SELECT table_name, table_collation 
FROM information_schema.tables 
WHERE table_schema = 'test' AND table_name = 'test_table';
            

2.4 查看列排序规则

示例:

-- 查看列排序规则
SHOW FULL COLUMNS FROM test_table;

-- 或使用信息模式
SELECT column_name, character_set_name, collation_name 
FROM information_schema.columns 
WHERE table_schema = 'test' AND table_name = 'test_table';
            

2.5 查看可用的排序规则

示例: 04 风哥提示:

-- 查看所有可用的排序规则
SHOW COLLATION;

-- 查看特定字符集的排序规则
SHOW COLLATION WHERE Charset = 'utf8mb4';
            

Part03-生产环境项目实施方案

3.1 服务器级排序规则配置

示例:在my.cnf中配置排序规则

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
            

3.2 数据库级排序规则配置

示例:

-- 创建数据库时指定排序规则
CREATE DATABASE test_db 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

-- 修改数据库排序规则
ALTER DATABASE test_db 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;
            

3.3 表级排序规则配置

示例:

-- 创建表时指定排序规则
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    description TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 修改表排序规则
ALTER TABLE test_table 
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
            

3.4 列级排序规则配置

示例:

-- 创建表时指定列排序规则
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
    description TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);

-- 修改列排序规则
ALTER TABLE test_table 
MODIFY COLUMN name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
            

3.5 查询时指定排序规则

示例:

-- 查询时指定排序规则
SELECT * FROM test_table 
ORDER BY name COLLATE utf8mb4_unicode_ci;

-- 比较时指定排序规则
SELECT * FROM test_table 
WHERE name COLLATE utf8mb4_bin = 'Test';
            

Part04-生产案例与实战讲解

4.1 utf8mb4_unicode_ci

  • 基于Unicode标准的排序规则
  • 不区分大小写
  • 不区分重音
  • 适合多语言环境

4.2 utf8mb4_general_ci

  • 基于通用规则的排序
  • 不区分大小写
  • 不区分重音
  • 排序速度比utf8mb4_unicode_ci快,但排序准确性稍差

4.3 utf8mb4_bin

  • 二进制排序
  • 区分大小写
  • 区分重音
  • 适合需要精确比较的场景

4.4 utf8mb4_unicode_520_ci

  • 基于Unicode 5.2.0标准的排序规则
  • 不区分大小写
  • 不区分重音
  • 提供更准确的Unicode排序

Part05-风哥经验总结与分享

5.1 选择合适的排序规则

  • 对于多语言环境,使用utf8mb4_unicode_ci
  • 对于需要区分大小写的场景,使用utf8mb4_bin
  • 对于对排序性能要求较高的场景,使用utf8mb4_general_ci

5.2 统一排序规则配置

  • 服务器、数据库、表、列使用相同的排序规则
  • 避免混合使用不同排序规则

5.3 性能考虑

  • utf8mb4_general_ci的排序速度比utf8mb4_unicode_ci快
  • 二进制排序(utf8mb4_bin)的比较速度最快
  • 在大型表上,排序规则的选择会影响查询性能

6. 常见错误与解决方案

6.1 排序规则不匹配

问题:在连接或比较不同排序规则的列时出现错误

解决方案:确保相关列使用相同的排序规则,或在查询时显式指定排序规则 05更多学习教程公众号风哥教程itpux_com

6.2 大小写敏感性问题

问题:查询结果不符合预期的大小写处理

解决方案:选择合适的排序规则,如需要区分大小写使用utf8mb4_bin

6.3 重音敏感性问题

问题:查询结果不符合预期的重音处理

解决方案:选择合适的排序规则,如需要区分重音使用带有_as后缀的排序规则

7. 示例:排序规则配置

示例:完整的排序规则配置

-- 1. 查看当前排序规则配置
SHOW VARIABLES LIKE 'collation_%';

-- 2. 修改服务器排序规则(在my.cnf中)
/*
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
*/

-- 3. 创建数据库时指定排序规则
CREATE DATABASE myapp 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

-- 4. 创建表时指定排序规则
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    name VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 5. 插入数据
INSERT INTO users (username, email, name) 
VALUES ('admin', 'admin@fgedu.net.cn', '管理员'),
       ('Admin', 'admin2@fgedu.net.cn', '管理员2'),
       ('ADMIN', 'admin3@fgedu.net.cn', '管理员3');

-- 6. 查询数据(不区分大小写)
SELECT * FROM users WHERE username = 'admin';

-- 7. 使用不同排序规则查询
SELECT * FROM users WHERE username COLLATE utf8mb4_bin = 'admin';

-- 8. 按名称排序
SELECT * FROM users ORDER BY name COLLATE utf8mb4_unicode_ci;
            

8. 总结

本教程详细介绍了MySQL的排序规则配置与使用,包括:

  • 排序规则概述
  • 查看排序规则配置
  • 配置排序规则(服务器级、数据库级、表级、列级)
  • 常用排序规则
  • 排序规则最佳实践
  • 常见错误与解决方案

选择合适的排序规则对于数据库的正确排序和比较字符串数据非常重要。在实际项目中,应根据具体的业务需求和数据特点,选择最适合的排序规则。对于多语言环境,推荐使用utf8mb4_unicode_ci;对于需要区分大小写的场景,使用utf8mb4_bin;对于对排序性能要求较高的场景,使用utf8mb4_general_ci。同时,应确保整个系统的排序规则配置一致,避免出现排序规则不匹配的错误。 06 from mysql视频:www.itpux.com

提示:在配置排序规则时,应考虑业务需求、性能影响和兼容性,选择最适合的排序规则方案。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息