MySQL的字符集
出自SurfLib
MySQL有两个和字符集有关的概念。一个就是字符集本身,一个是字符集校验规则。字符集影响数据在传输和存储过程中的处理方式,而字符集校验则影响ORDER BY和GROUP BY这些排序方式。
目录 |
和存储有关的
- 服务器字符集(@@character_set_server)
- 库字符集(@@character_set_database)
- 表字符集
- 字段字符集
在创建一个表的时候,每个字段只要不是binary,都会有一个字符集。(?)当然,如果不指定,那么在SHOW CREATE TABLE的时候,它是不会显示出来的。
建表时候,字段字符集的选取方式如下:
- if 字段指定的字符集
- else if 表指定的字符集
- else if @@character_set_database
- else @@character_set_server(如果没有设定,这个值为latin1)
和传输有关的
- @@character_set_connection
- @@character_set_results
- @@character_set_client
相互之间的影响
假设C是MySQL客户端,S是MySQL Server。
C发送请求到S
- S会把请求的数据从@@character_set_client转成@@character_set_connection。
- 然后S会检测相关字段的字符集,则把数据从@@character_set_connection转为字段的字符集,然后再存储或者查询。
- 如果S有数据(result)要返回给C,那么S会把取出的数据,从字段的字符集,转为@@connection_result,然后再发送到C
其他
到MySQL5.1.22为止,如果要修改默认的character_set_client,character_set_connection,character_set_result。只有在my.cnf里添加如下启动选项: init_connect="SET NAMES utf8" default-character-set只是针对存储层(server,database,table,column)的,对于客户端和服务器端的通讯层没有任何影响。


