MySQL 排序规则17 Mar 2025 | 5 分钟阅读 MySQL 中的排序规则 (collation) 是一组用于比较特定字符集中的字符的规则。它是一系列针对特定集合的顺序。MySQL 支持各种字符集,每个字符集总是使用一个或多个排序规则,至少一个默认排序规则。MySQL 不允许任何两个字符集使用相同的排序规则。 我们可以使用下面的语句来查看 MySQL 数据库服务器中所有可用的字符集的默认排序规则。 它将返回以下输出 ![]() 在此图像中,默认排序规则 (Default Collation) 列的值指定了每个字符集的默认排序规则名称。 需要注意的是,任何字符集的排序规则总是以字符集名称开头,并以 _cs (区分大小写), _ci (不区分大小写), 或 _bin (二进制) 结尾。 默认情况下,上述语句 (SHOW CHARACTER SET) 会生成 MySQL 中所有可用的排序规则。如果我们想获取任何特定字符集的所有排序规则名称,可以使用 SHOW COLLATION 语句的可选 LIKE 或 WHERE 子句,它会返回匹配的字符集名称。 以下是用于查找特定字符集排序规则名称的语法 以下语句显示了 MySQL 中 latin1 字符集的所有排序规则名称 我们可以看到如下输出,其中每个字符集都有一个默认排序规则,例如 latin1_danish_ci 是 latin1 字符集的默认排序规则。 ![]() 排序规则还使我们能够对字符字符串进行排序。它根据权重对字符进行排序。字符串中的每个字符都映射到一个权重。如果字符的权重比较相同,则称为相等。同样,如果字符的权重不同,则根据其权重的相对大小进行比较。 MySQL 提供了 WEIGHT_STRING() 函数来查找字符串字符的权重。此函数返回一个表示权重的二进制字符串。因此,我们需要使用 HEX(WEIGHT_STRING(str)) 函数来以可打印的形式显示权重。 让我们通过一个例子来理解这一点。下面的语句处理一个非二进制的、不区分大小写的字符串 'AaBbCc',并返回对于给定字母没有差异的权重。 请看下面的输出,其中权重 A=41=a, B=42=b, 和 C=43=c 是相等的。 ![]() 如果我们处理一个二进制字符串 'AaBbCc',那么给定字母的权重可能会有所不同。 这将给出如下输出,其中权重 A=41, a=61, B=42, b=62, C=43, 和 c=63 是不同的。 ![]() 设置字符集和排序规则MySQL 允许我们通过四种方式配置字符集和排序规则,如下所示:
在服务器级别设置字符集和排序规则 我们知道 MySQL 使用 latin1 作为默认字符集,并以 latin1_swedish_ci 作为默认排序规则。MySQL 还允许我们在服务器启动时更改这些默认设置。 如果我们在服务器启动时只设置一个字符集,MySQL 将使用该字符集的默认排序规则。如果我们显式设置字符集和排序规则,MySQL 将把这些设置用于数据库服务器中创建的所有数据库。请看下面的语句,该语句通过命令行工具将 utf8 设置为服务器的字符集,将 utf8_unicode_cs 设置为排序规则。 在数据库级别设置字符集和排序规则 在 MySQL 中创建数据库时,无需设置字符集和排序规则。这是因为 MySQL 在创建数据库时将使用服务器的默认字符集和排序规则。 我们可以在使用 CREATE DATABASE 或 ALTER DATABASE 语句创建数据库时,在数据库级别修改默认设置。 以下是使用 CREATE DATABASE 语句创建数据库的语法 以下是使用 ALTER DATABASE 语句创建数据库的语法 当我们在数据库级别指定字符集和排序规则时,MySQL 会将其用于数据库中创建的所有表。 示例 本示例说明了如何在数据库级别设置字符集和排序规则。 在上述语句中,我们显式地为数据库指定了字符集和排序规则。因此,它不使用服务器级别的默认设置。 在表级别设置字符集和排序规则 数据库可能包含具有不同字符集和排序规则的表。这些字符集和排序规则与默认设置不同。当使用 CREATE TABLE 语句创建表或使用 ALTER TABLE 语句修改表结构时,我们可以为特定表指定默认字符集和排序规则。 以下是使用 ALTER TABLE 语句创建数据库的语法。 以下是使用 ALTER TABLE 语句创建数据库的语法 示例本示例说明了如何在表级别设置字符集和排序规则。 在上面的示例中,我们没有在表级别指定字符集和排序规则。因此,它使用数据库的字符集和排序规则。此处,表 demotable1 的字符集为 utf8,排序规则为 utf8_unicode_ci。 如果我们想将上述表的字符集更改为 latin1,排序规则更改为 latin1_german1_ci,请使用以下语句。 在列级别设置字符集和排序规则 列可以是不同的类型,例如 CHAR, VARCHAR, 或 TEXT。它可以拥有自己的字符集和排序规则,这与表的默认设置不同。 我们可以在 CREATE TABLE 或 ALTER TABLE 语句中使用列定义来更改列的字符集和排序规则设置,如下所示: 示例本示例说明了如何在列级别设置字符集和排序规则。 在上面的示例中,我们已在表创建时确定的列级别更改了字符集和排序规则。因此,它使用了 utf8mb4 作为字符集,utf8mb4_0900_ai_ci 作为排序规则。 设置字符集和排序规则的关键点以下是设置字符集和排序规则的关键点或规则:
下一个主题MySQL 正则表达式 |
我们请求您订阅我们的新闻通讯以获取最新更新。