字符集

用到字符的地方就会用到字符集,通过字符集对字符串编码转换成二进制序列,进而可以对这个二进制序列进行存储或传输,之后在读取的时候通过该字符集对二进制序列进行解码得到字符串内容,这就是字符集的用途。

在存储上,MySQL 服务提供了不同级别的字符集设置,它们分别是:服务器字符集数据库字符集表字符集列字符集。它们的作用分别是:服务器字符集,用于设置数据库的默认字符集;数据库字符集,用于设置表的额默认字符集;表字符集,用于设置列的默认字符集。

在连接上,MySQL 服务提供了不同处理过程的字符集设置,它们分别是:客户端字符(character_set_client)服务端字符集(character_set_connection)响应结果字符集(character_set_results)。它们的作用分别是:客户端字符集,用于对客户端发送的请求内容进行编码,服务器接收到请求后需要用该字符集对请求内容进行解码;服务端字符集,服务器在处理请求过程中使用到的字符集,服务器并不是直接使用客户端字符集进行处理,它需要先将客户端字符集的请求内容转换成服务端字符集的请求内容,然后再对请求进行处理;响应结果字符集,用于响应结果进行编码,然后再返回给客户端,客户端接收到响应后,需要用该字符集对响应内容进行解码。

排序规则

排序规则,定义字符集内字符的排列顺序,用作字符的比较,结果集的字符串排列顺序就是使用这个排序规则进行排序的。

存储字符集

服务器字符集

默认字符集(character-set-server):latin1

默认排序规则(collation-server):latin1_swedish_ci

设置方式:

  • 服务端配置文件(/etc/my.cnf or /etc/mysql/mysql.conf.d/mysqld.cnf)

[mysqld]

character-set-server=utf8

collation-server=utf8_general_ci

  • 服务端命令行启动参数

mysqld --character-set-server=latin1 \

--collation-server=latin1_swedish_ci

  •  系统变量

SET [GLOBAL|SESSION|LOCAL] character-set-server=utf8;

SET [GLOBAL|SESSION|LOCAL] collation-server=utf8_general_ci;

数据库字符集

默认字符集:服务器字符集

默认排序规则:服务器字符排序规则

设置方式:

  • 创建数据库

CREATE DATABASE db_name

[[DEFAULT] CHARACTER SET charset_name]

[[DEFAULT] COLLATE collation_name]

  • 修改数据库

ALTER DATABASE db_name

[[DEFAULT] CHARACTER SET charset_name]

[[DEFAULT] COLLATE collation_name]

表字符集

默认字符集:数据库字符集

默认排序规则:数据库字符排序规则

设置方式:

  • 创建表

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]

列字符集

默认字符集:表字符集

默认排序规则:表字符排序规则

设置方式:

  • 创建表

CREATE TABLE tbl_name

(

col_name {CHAR | VARCHAR | TEXT} (col_length)

[CHARACTER SET charset_name]

[COLLATE collation_name]

);

  • 修改表

ALTER TABLE tbl_name MODIFY

col_name {ENUM | SET} (val_list)

[CHARACTER SET charset_name]

[COLLATE collation_name]

连接字符集

客户端字符集(character_set_client)

默认字符集:utf8

设置方式:

  • 客户端命令行连接参数

--default-character-set

  • 客户端配置文件

[mysql]

default-character-set=koi8r

  • SQL 语句

mysql> charset koi8r

or

mysql> set names koi8r

  • 系统变量

SET [GLOBAL|SESSION|LOCAL] character-set-client =utf8

服务器字符集(character_set_connection)

默认字符集:utf8

默认排序规则:没有默认值

设置方式:

  • 客户端命令行连接参数

--default-character-set

  • 客户端配置文件

[mysql]

default-character-set=koi8r

  • SQL 语句

mysql> charset koi8r

or

mysql> set names koi8r

  • 系统变量

SET [GLOBAL|SESSION|LOCAL] character-set-connection =utf8

响应结果字符集(character_set_results)

默认字符集:utf8

设置方式:

  • 客户端命令行连接参数

--default-character-set

  • 客户端配置文件

[mysql]

default-character-set=koi8r

  • SQL 语句

mysql> charset koi8r

or

mysql> set names koi8r

  • 系统变量

SET [GLOBAL|SESSION|LOCAL] character-set-results =utf8

备注:

上面三种字符集的前三种设置方式(客户端命令行连接参数、客户端配置文件、SQL 语句),都是对这三种字符集的统一设置,如果需要对这三种结果集分别设置,可以使用系统变量的方式进行设置。