用到字符的地方就会用到字符集,通过字符集对字符串编码转换成二进制序列,进而可以对这个二进制序列进行存储或传输,之后在读取的时候通过该字符集对二进制序列进行解码得到字符串内容,这就是字符集的用途。
在存储上,MySQL 服务提供了不同级别的字符集设置,它们分别是:服务器字符集、数据库字符集、表字符集、列字符集。它们的作用分别是:服务器字符集,用于设置数据库的默认字符集;数据库字符集,用于设置表的额默认字符集;表字符集,用于设置列的默认字符集。
在连接上,MySQL 服务提供了不同处理过程的字符集设置,它们分别是:客户端字符集(character_set_client)、服务端字符集(character_set_connection)、响应结果字符集(character_set_results)。它们的作用分别是:客户端字符集,用于对客户端发送的请求内容进行编码,服务器接收到请求后需要用该字符集对请求内容进行解码;服务端字符集,服务器在处理请求过程中使用到的字符集,服务器并不是直接使用客户端字符集进行处理,它需要先将客户端字符集的请求内容转换成服务端字符集的请求内容,然后再对请求进行处理;响应结果字符集,用于响应结果进行编码,然后再返回给客户端,客户端接收到响应后,需要用该字符集对响应内容进行解码。
排序规则,定义字符集内字符的排列顺序,用作字符的比较,结果集的字符串排列顺序就是使用这个排序规则进行排序的。
服务器字符集
默认字符集(character-set-server):latin1
默认排序规则(collation-server):latin1_swedish_ci
设置方式:
[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
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
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
mysql> charset koi8r
or
mysql> set names koi8r
SET [GLOBAL|SESSION|LOCAL] character-set-results =utf8
备注:
上面三种字符集的前三种设置方式(客户端命令行连接参数、客户端配置文件、SQL 语句),都是对这三种字符集的统一设置,如果需要对这三种结果集分别设置,可以使用系统变量的方式进行设置。