📜  MySQL 中的排序规则和字符集是什么?

📅  最后修改于: 2021-09-09 10:33:08             🧑  作者: Mango

MySQL Collation一直是 MySQL 初学者的一个神秘话题。一个MySQL归类是良好定义的组,其被用于通过使用其相应的编码进行比较的特定字符集的字符的规则。 MySQL 中的每个字符集可能有多个排序规则,并且至少有一个默认排序规则。两个字符集不能有相同的排序规则。

  • 字符集是一组特定的符号和编码技术。排序规则是一组用于比较字符集中字符的规则。字符集允许我们通过各种字符集存储数据,并根据各种排序规则进行比较。我们可以在服务器、数据库、表和列级别突出显示字符集。
  • 假设,我们有一些带有 A、B、C、D、a、b、c、d 的字母表。我们为所有字母分配了一个数字,例如 A=1,B=2,C=3,D=4,a=5,b=6,c=7,d=8。所以,对于符号 A 编码是 1,对于 B 编码是 2,对于 C 编码是 3,依此类推。如果我们要比较字符串A、B、a、b。我们有一个更简单的方法来做到这一点,就在刚才,我们已经为一些字母分配了一个不同的值,比如 A 的编码是 1,对于 B,它是 2 类似地,对于 a 和 b 的编码是 5 和 6。所以,我们如何得到能够执行这种比较,只是因为整理。我们明确地将整理技术(比较相应的编码)应用于我们的字符集。
  • 字符集不仅影响数据存储,还影响客户端程序和 MySQL 服务器之间的通信介质。如果您希望客户端程序使用不同于默认字符集的字符集与服务器通信,则需要突出显示您正在使用的字符集之一。例如,要使用utf8 Unicode字符集,请在建立与服务器的连接后使用以下语句:
SET NAMES 'utf8'; 

有一条 MySQL 语句可以了解字符集的默认排序规则,如下所示:

SHOW CHARACTER SET;

mysql中的字符集

字符集

  • 默认情况下,SHOW CHARACTER SET 语句显示所有可用的字符集。但是如果要访问特定类型的字符集,则需要使用 MySQL 的 LIKE 或 WHERE 子句来指示哪些字符集名称与条件匹配。以下示例显示了一些与格式(‘utf%’)匹配的 Unicode 字符集:

使用 like 语句获取字符集

使用 LIKE 语句获取字符集

  • 如果你想拥有一个特定或给定字符集的所有排序规则,那么 MySQL 提供了一个语句 SHOW COLLATION 如下:
SHOW COLLATION LIKE 'character_set_name%';


使用 WHERE 语句获取字符集

使用 WHERE 语句获取排序规则

  • 在上表中,排序规则以_ci结尾,这里的 ci 代表不区分大小写。可能还有其他类型的排序规则,例如:
1.  _cs(Case-sensitive) ,
2.  _bin(Binary) 
  • MySQL 查询在数据库级别设置字符集和排序规则:如果在创建时未指定字符集,则数据库使用默认字符集,但如果您想分配特定字符集,则可以通过 MySQL 查询显式表达它:
CREATE DATABASE name_of_database
CHARACTER SET character-set_name;
COLLATE collation_name;

例子:

CREATE DATABASE my_database
CHARACTER SET utf8mb4
COLLATE utf8_unicode_ci;

您还可以使用 MySQL ‘ALTER’ 语句更改或应用数据库的字符集和排序规则名称:

ALTER DATABASE database_name
CHARACTER SET character_set_name
COLLATE collation_name; 

例子:

ALTER DATABASE my_database
CHARACTER SET utf8mb4
COLLATE  utf8mb4_0900_ai_ci;

MySQL 查询在表级别设置字符集和排序规则: 您还可以在创建表时明确指定所需的字符集和排序规则类型,但如果不指定则默认字符-set 和排序规则将被应用。

CREATE TABLE table_name(
ID   INT   AUTO_INCREMENT  NOT NULL,
NAME VARCHAR (20)     NOT NULL,
ADDRESS  CHAR (25) ,
SALARY   DECIMAL (18, 2),        
PRIMARY KEY (ID) );
CHARACTER SET character_set_name
COLLATE collation_name ;
  • 如果您在创建表时没有通过 MySQL ‘ALTER’ 语句应用它们,您还可以根据需要设置字符集和排序规则名称:
ALTER TABLE table_name(
RENAME COLUMN old_name TO new_name);
CHARACTER SET character_set_name
COLLATE collation_name;
  • 您还可以在列级别设置字符集和排序规则名称: 正如我们所知,表中的 Column 可能包含各种数据,例如 (varchar, Int, float )。因此,您可以根据需要为不同类型(数据类型)的列明确指定字符集和排序规则名称。
ALTER TABLE table_name
MODIFY column_name   VARCHAR(25)
CHARACTER SET latin1;