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)的,对于客户端和服务器端的通讯层没有任何影响。

个人工具
全站导航
广告