MySQL 校对规则

MySQL 校对规则

在MySQL中,校对规则是用于比较特定字符集中的字符的一组规则。它是对任何特定集合的顺序。MySQL支持各种字符集,并且每个字符集始终使用一个或多个校对规则,至少一个默认的校对规则。MySQL不允许我们使用相同的校对规则来使用任何两个字符集。

我们可以使用下面的语句来查看MySQL数据库服务器中可用的所有默认校对规则的字符集:

SHOW CHARACTER SET;

它将返回以下输出:

MySQL 校对规则

在这个图像中, Default Collation 列的值指定每个字符集的默认排序名称。

需要注意的是,对于任何字符集,排序总是以字符集名称开头,并以 _cs(区分大小写)_ci(不区分大小写)或_bin(二进制) 结尾。

默认情况下,上述语句(SHOW CHARACTER SET)会生成MySQL中所有可用的排序。如果我们想要获取特定字符集的所有排序名称,请使用SHOW COLLATION语句的可选 LIKE或WHERE子句,它返回匹配的字符集名称。

以下是用于查找特定字符集的排序名称的语法:

SHOW COLLATION LIKE 'character_set_name%';

以下语句显示MySQL中latin1字符集的所有排序名称:

SHOW COLLATION LIKE 'latin1%';

我们可以看到输出结果如下,每个字符集都具有默认的排序规则,比如 latin1_danish_cilatin1 字符集的默认排序规则:

MySQL 校对规则

在计算机领域中,比较排序也可以用来对字符字符串进行排序。它根据权重对字符进行排序。字符字符串中的每个字符都有一个对应的权重。如果字符的权重相同,则称为相等。如果字符的权重不同,则根据它们的权重大小进行比较。

MySQL提供了 WEIGHT_STRING() 函数来找到字符串字符的权重。该函数返回一个表示权重的二进制字符串值。因此,我们需要使用 HEX(WEIGHT_STRING(str)) 函数以可打印的形式显示权重。

让我们通过一个例子来理解。下面的语句接受一个非二进制大小写不敏感的字符串 ‘AaBbCc’ ,并返回给定字母的相同权重:

SELECT HEX(WEIGHT_STRING('AaBbCc' COLLATE latin1_swedish_ci)) AS Weight;

在下面的输出中,权重A=41=a,B=42=b,C=43=c是相等的:

MySQL 校对规则

如果我们取一个二进制字符串 ‘AaBbCc’ 那么给定的字母它们的权重可以不同:

SELECT HEX(WEIGHT_STRING(BINARY 'AaBbCc')) AS Weight;

它将给出以下输出,其中权重A=41,a=61,B=42,b=62,C=43和c=63是不同的:

MySQL 校对规则

设置字符集和排序规则

MySQL允许我们以四种方式配置字符集和排序规则,如下所示:

  1. 在服务器级别进行设置
  2. 在数据库级别进行设置
  3. 在表级别进行设置
  4. 在列级别进行设置

在服务器级别设置字符集和排序规则

我们知道MySQL使用latin1作为默认字符集,使用latin1_swedish_ci作为默认排序规则。MySQL还允许我们在服务器启动时更改这些默认设置。

如果我们只在服务器启动时设置字符集,MySQL将使用指定字符集的默认排序规则。如果我们同时显式设置字符集和排序规则,MySQL将在数据库服务器上为所有创建的数据库使用这些设置。请参阅以下语句,通过命令行工具为服务器指定了 utf8 作为字符集,以及 utf8_unicode_cs 作为排序规则:

mysqld --character-set-server = utf8 --collation-server = utf8_unicode_ci

设置数据库级别的字符集和校对规则

在MySQL中创建数据库时,无需设置字符集和校对规则。这是因为MySQL会在创建数据库时使用服务器的默认字符集和校对规则。

我们可以使用CREATE DATABASE或ALTER DATABASE语句在创建数据库时修改默认设置。

以下是使用CREATE DATABASE语句创建数据库的语法:

CREATE DATABASE database_name
CHARACTER SET character_set_name;
COLLATE collation_name

以下是使用ALTER DATABASE语句创建数据库的语法:

ALTER DATABASE database_name
CHARACTER SET character_set_name
COLLATE collation_name;

当我们在数据库级别指定字符集和排序规则时,MySQL会在数据库中创建的所有表中使用它。

示例

这个示例解释了如何在数据库级别设置字符集和排序规则。

CREATE DATABASE demo_db
CHARACTER SET utf8
COLLATE utf8_unicode_ci;

在上述语句中,我们显式地指定了数据库的字符集和校对规则。因此,它不使用服务器级别的默认设置。

设置表级别的字符集和校对规则

一个数据库会包含具有字符集和校对规则的表。这些字符集和校对规则与默认设置不同。当使用CREATE TABLE语句创建表或使用ALTER TABLE语句修改表的结构时,我们可以指定特定表的默认字符集和校对规则。

下面是使用ALTER TABLE语句创建数据库的语法。

CREATE TABLE table_name(
   ...
)
CHARACTER SET character_set_name
COLLATE collation_name

以下是使用ALTER TABLE语句创建数据库的语法:

ALTER TABLE table_name(
  ...
)
CHARACTER SET character_set_name
COLLATE collation_name

示例

该示例解释了如何在表级别设置字符集和排序规则。

USE demodb; 
CREATE TABLE demotable1(
Column1 char(25)
);

在上面的示例中,我们并未在表级别指定字符集和排序规则。因此,它使用数据库的字符集和排序规则。在这里,表demotable1的字符集是utf8,排序规则是utf8_unicode_ci。

如果我们想要将上述表的字符集更改为latin1,并将排序规则更改为latin1_german1_ci,请使用以下语句:

ALTER TABLE demptable1
CHARACTER SET latin1
COLLATE latin1_german1_ci;

在列级别设置字符集和排序规则

列可以有不同的类型,例如 CHAR、VARCHAR 或 TEXT 。它可以有自己的字符集和排序规则,与表的默认设置不同。

可以使用CREATE TABLE或ALTER TABLE语句来在列的定义中更改列的字符集和排序规则设置,如下所示:

column_name [column_type] (length)
CHARACTER SET character_set_name
COLLATE collation_name

示例

这个示例解释了如何在列级别上设置字符集和校对规则。

ALTER TABLE demotable1
MODIFY column1 VARCHAR(25)
CHARACTER SET utf8mb4
COLLATION utf8mb4_0900_ai_ci;

在上面的示例中,我们在创建表时更改了列级别上确定的字符集和排序规则。因此,它使用 utf8mb4 作为字符集,使用 utf8mb4_0900_ai_ci 作为排序规则。

设置字符集和排序规则的关键点

设置字符集和排序规则的关键点或规则如下:

  • 如果我们明确设置它们,可以在MySQL中同时使用字符集和排序规则。
  • 如果仅设置字符集而没有指定排序规则,MySQL将使用字符集的默认排序规则。
  • 如果只设置排序规则而没有指定字符集,MySQL将使用与排序规则相关联的字符集。
  • 如果我们不同时指定字符集和排序规则,MySQL将使用默认的字符集和排序规则。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程