MySQL 8.x字符集和Collation设置轻松入门

100人浏览   2024-08-04 12:47:25

MySQL 正式版 8.0.26已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能。


查看MySQL版本号:mysql --version

演示CentOS 8中安装部署和配置 MySQL 8.0 的完整过程


一、CharacterSet和Collation简述

A character set is a set of symbols and encodings. A collation is a set of rules for comparing characters in a character set.

Character Set: 一套字符及其编码,即字符集;

Collation:在字符集内用于比较或排序字符的一套规则,即校验规则。

  • MySQL服务器支持多种字符集(Character Set)
  • 每个字符集至少有一个Collation
  • 大部分字符集都有多个Collation
  • 每个字符集都有一个默认的Collation
  • 两个不同的字符集不会有相同的Collation
  • MySQL可以在服务器、数据库、表或字段 级别 指定使用的字符集

下面是一些常见的Collation后缀:



二、查看MySQL Server默认字符集

MySQL官方文档可查看默认的Charset和Collation:

  • <=5.7 doc MySQL Server 5.7或之前版本默认的Charset和Collation是: latin1 和 latin1_swedish_ci
  • 8.x doc MySQL Server 8.x(当前版本)默认的Charset和Collation是: utf8mb4 和 utf8mb4_0900_ai_ci


查看MySQL Server当前的Charset和Collation:

show variables like 'character_set_server';

show variables like 'collation_server';

或者使用语句:

select @@character_set_server, @@collation_server;


默认的charset是utf8mb4, 而且 utf8mb4 默认的collation是 utf8mb4_0900_ai_ci。


或者使用如下命令查看:

show variables like 'character%';

show variables like 'collation%';



MySQL中utf8字符集使用三个字节编码一个字符,自2004(MySQL 4.1)年被引入,能够支持绝大多数语言,但依然有些字符不能正确编码,如表情字符,为此MySQL 5.5引入了utf8mb4字符集,提供了另一种选择。在MySQL 5.7对utf8mb4进行了大幅优化,并丰富了校验字符集。


MySQL 8 默认编码使用utf8mb4,utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。

MySQL数据库的 "utf8"并不是真正概念里的 UTF-8,MySQL中的"utf8"编码只支持最大3字节每字符,真正的大家正在使用的UTF-8编码是应该能支持4字节每个字符。


三、数据库(Database)的Charset和Collation

创建数据库的时候,如果没有指定character set 和 collation,会自动用MySQL Server的 character set和collation。

(1)查看数据的Character Set和Collation

USE db_name;

SELECT @@character_set_database, @@collation_database;


不想改变当前数据库的话,可以使用语句:

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME

FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';


(2)指定或修改数据库(Database)的Character Set和Collation

创建db时指定:

CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;

修改:

ALTER DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;


四、表(Table)的Charset和Collation

如果创建表的时候没有指定表级别Charset和Collation,会默认使用数据库(Database)的Charset和Collation。


查看表(Table)的Charset和Collation

SELECT

t.TABLE_SCHEMA,

t.table_name,

ccsa.*

FROM

information_schema.`TABLES` t,

information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` ccsa

WHERE ccsa.collation_name = t.table_collation

AND t.table_schema = "db_name"

AND t.table_name = "table_name";


指定或修改表(Table)的Character Set和Collation

CREATE TABLE tbl_name (column_list)

[[DEFAULT] CHARACTER SET charset_name]

[COLLATE collation_name]]

ALTER TABLE tbl_name

[[DEFAULT] CHARACTER SET charset_name]

[COLLATE collation_name]


五、列(Column)的Charset和Collation

如果创建表的时候没有指定列的Charset和Collation,会默认使用表(Table)的Charset和Collation。


查看列(Column)的Charset和Collation

SELECT

*

FROM information_schema.`COLUMNS`

WHERE table_schema = "db_name"

AND table_name = "table_name";

相关推荐