mysql 字符集(character set)和排序规则(collation)

MySQL字符集与排序规则详解

概念

在 MySQL 中,字符集(character set)和排序规则(collation)是两个相关但不同的概念:

字符集(character set)定义了如何将字符存储到字节中。
排序规则(collation)定义了如何比较字符,以及在排序和搜索时如何处理字符。

1、字符集

1.1、举例

在这里插入图片描述

1.2、常见字符集 utf8 和 utf8mb4 区别

  • 字符支持范围:

utf8:仅支持最多3字节的UTF-8字符。这意味着它只能表示基本多语言平面(BMP)的字符,即 Unicode 范围内的 U+0000 至 U+FFFF 的字符。这种字符集无法表示一些扩展的 Unicode 字符(例如表情符号和某些东亚文字)。
utf8mb4:支持最多4字节的UTF-8字符。这意味着它可以表示所有的 Unicode 字符,包括基本多语言平面的字符以及补充平面字符(例如表情符号和历史文字)。

  • 存储需求:

utf8:每个字符最多需要3个字节。
utf8mb4:每个字符最多需要4个字节。因此,在存储相同数量的字符时,utf8mb4 可能比 utf8 占用更多的存储空间。

  • 兼容性:

utf8 和 utf8mb4 在表示基本多语言平面(BMP)字符时是兼容的,但在表示补充平面字符时,只有 utf8mb4 能正确处理这些字符。

  • 选择建议
    如果你的应用程序需要处理表情符号或者某些特定的Unicode字符(如东亚的历史文字),建议使用 utf8mb4。
    如果你只需要处理基本多语言平面的字符,utf8 也可以满足需求,但一般建议使用 utf8mb4 以确保更广泛的字符集支持和未来的兼容性。

1.3、字符集 使用

  • 定义表结构

DEFAULT CHARSET=utf8mb4

CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

  • 在配置文件中定义

可以确保在新建数据库、表和列时默认使用 utf8mb4 字符集。

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

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

2、排序规则

2.1、举例

在这里插入图片描述

2.2、常见的排序规则 utf8mb4_bin 、utf8mb4_general_ci、utf8mb4_unicode_ci

简单说,需要支持大小写的就用 utf8mb4_bin

  • utf8mb4_general_ci:不区分大小写,比较速度较快,但支持的Unicode特性不如utf8mb4_unicode_ci。

  • utf8mb4_unicode_ci:不区分大小写,支持完整的Unicode排序规则,处理更为精确和全面。

  • utf8mb4_bin 的特点
    区分大小写:utf8mb4_bin 是区分大小写的,因为它是基于字符的二进制值进行比较。例如,‘a’ 和 ‘A’ 被认为是不同的字符。
    区分字符顺序:比较时严格按照每个字符的二进制编码值进行,utf8mb4_bin 会区分所有字符的顺序,包括大小写字母和其他符号。

  • 使用场景
    精确比较:当需要对字符串进行精确的、区分大小写的比较时,utf8mb4_bin 是理想的选择。例如,密码比较和需要区分大小写的标识符。
    存储敏感数据:存储对大小写敏感的数据时,比如用户名、产品代码等,可以使用 utf8mb4_bin 以确保数据的准确性。

2.3、使用

  • 在表结构定义时使用

COLLATE=utf8mb4_bin

CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

  • 在进行查询时使用
SELECT * FROM example WHERE name = 'ExampleName' COLLATE utf8mb4_bin;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值