MySQL utf8mb4_unicode_ci vs utf8mb4_bin

MySQL utf8mb4_unicode_ci vs utf8mb4_bin

MySQL是一个广泛使用的关系型数据库管理系统,支持多种字符集和排序规则。在MySQL 5.5.3及更高版本中,引入了utf8mb4字符集,用于处理超过3个字节的Unicode字符。但是,对于排序规则,utf8mb4_unicode_ci和utf8mb4_bin是两个常见的选项,它们的区别显而易见。

阅读更多:MySQL 教程

utf8mb4_unicode_ci

utf8mb4_unicode_ci(也称为UCA)是基于Unicode标准的一种排序规则。它使用Unicode Collation Algorithm对字符进行排序和比较。在使用这种排序规则时,MySQL会将每个字符转换成Unicode码点,然后根据Unicode标准进行排序。

示例代码:

CREATE TABLE `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

这段代码创建了一个名为“users”的表,这个表的“name”列使用utf8mb4_unicode_ci排序规则。

如果我们向这个表中插入以下数据:

INSERT INTO `users` (`name`) VALUES ('张三'),('李四'),('田七'),('王五'),('Alan');

那么,当我们使用以下查询时,我们将得到下面的结果:

SELECT * FROM `users` ORDER BY `name`;
id name
5 Alan
1 张三
2 李四
4 王五
3 田七

我们可以看到,这些行按照姓名的字母顺序排序,尽管名字中包含不同的Unicode字符。

utf8mb4_bin

utf8mb4_bin是区分大小写的排序规则。当使用这种排序规则时,MySQL会将所有字符按照它们的二进制值进行排序。

示例代码:

CREATE TABLE `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

这段代码创建了一个名为“users”的表,这个表的“name”列使用utf8mb4_bin排序规则。

如果我们向这个表中插入与之前相同的数据,那么当我们使用以下查询时,将得到不同的结果:

SELECT * FROM `users` ORDER BY `name`;
id name
5 Alan
2 李四
1 张三
4 王五
3 田七

我们可以看到,这些行按照字符的二进制值排序,与字符中的Unicode码点无关。

总结

在MySQL中,utf8mb4_unicode_ci和utf8mb4_bin是两种不同的排序规则。utf8mb4_unicode_ci使用Unicode Collation Algorithm进行排序,而utf8mb4_bin则根据字符的二进制值进行排序。因此,在选择排序规则时,需要根据实际需要选择不同的规则。一般来说,如果需要对多语言文本进行排序,那么应该使用utf8mb4_unicode_ci,因为它能够正确地排序包含不同Unicode字符的文本。如果需要区分大小写并根据精确的字符值排序,那么应该选择utf8mb4_bin。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程