MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL 排序规则

MySQL中的排序规则是一组用于比较特定字符集中的字符的规则。它是对任何特定集合的订单序列。 MySQL支持各种字符集,并且每个字符集始终使用一个或多个排序规则,至少一个默认排序规则。 MySQL不允许我们让任何两个字符集使用相同的排序规则。
我们可以使用以下语句查看MySQL数据库服务器中可用的所有默认字符集排序规则:
SHOW CHARACTER SET;
它将返回以下输出:
MySQL Collat​​ion
在此图中, 默认排序规则列值指定每个字符集的默认排序规则名称。
请注意,任何字符集的排序规则始终以字符集名称开头,以 结尾 _cs(区分大小写),_ ci(不区分大小写)或_bin(二进制)
默认情况下,以上语句(SHOW CHARACTER SET)产生所有可用的 MySQL 中的排序规则。如果要获取任何特定字符集的所有归类名称,请使用可选的 LIKE或 WHERE子句 中的SHOW COLLATION语句返回匹配的字符集名称。
以下是用于查找特定字符集的归类名称的语法:
SHOW COLLATION LIKE 'character_set_name%';
以下语句显示MySQL中latin1字符集的所有归类名称:
SHOW COLLATION LIKE 'latin1%';
我们可以看到以下输出,其中每个字符集都具有默认排序规则,例如 latin1_danish_ci latin1 字符集的默认排序规则:
MySQL Collat​​ion
该排序规则还为我们提供了对字符串进行排序的功能。它根据权重执行字符排序。字符串中可用的每个字符都映射到权重。如果字符比较的权重相同,则称为相等。同样,如果字符的权重不同,它将根据其权重的相对大小进行比较。
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 Collat​​ion
如果我们采用二进制字符串 'AaBbCc',则对于给定的字母,其权重可能会有所不同:
SELECT HEX(WEIGHT_STRING(BINARY 'AaBbCc')) AS Weight;
在权重A = 41,a = 61,B = 42,b = 62,C = 43和c = 63不同的情况下,输出如下:
MySQL Collat​​ion

设置字符集和排序规则

MySQL允许我们以四种方式配置字符集和排序规则,如下所示:
在服务器级别设置 在数据库级别设置 在表格级别设置 在列级别设置
在服务器级别设置字符集和排序规则
我们知道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。
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使用默认的字符集和排序规则。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4