遇到一个创建数据库的SQL语句
CREATE DATABASE testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
注意:这里指定字符集是用utf8,而不是utf-8。
对上面的SQL语句中的CHARACTER SET 和 COLLATE产生了兴趣。
简单来说,CHARACTER SET是指字符集,而COLLATE是指校对集(可以理解为排序规则)。
1、Character Set
1.1、字符集的4个层次
mysql4.1及其之后的版本,对字符集的支持分为四个层次:
服务器(server),数据库(database),数据表(table)和连接(connection):
character_set_server:这是设置服务器使用的字符集 character_set_client :这是设置客户端发送查询使用的字符集 character_set_connection :这是设置服务器需要将收到的查询串转换成的字符集 character_set_results :这是设置服务器要将结果数据转换到的字符集,转换后才发送给客户端
可以通过下面的SQL语句来查看这4个值
SHOW VARIABLES LIKE ‘%character_set%‘;
1.2、字符集的整个过程
- client发送一个查询; - 服务器收到查询,将查询串从character_set_client 转换到character_set_connection,然后执行转换后的查询; - 服务器将结果数据转换到character_set_results字符集后发送回客户端。
1.3、设置字符集
1、告诉服务器发送的数据是什么类型的 character_set_client
2、告诉转换器,转换什么编码 character_set_connection
3、查询结果用什么编码 character_set_results
如果以上三者都为字符集N,可简写为set names N;
例如,执行这三条命令:
set character_set_client=gbk; set character_set_connection=gbk; set_character_set_results=gbk;
这三句可以简写为
set names gbk;
1.4、查看所有字符集
SHOW CHARACTER SET;
2、Collate
Collate 可以理解为,排序规则等。一个字符集可能有多种校对集合;
查看所有的Collation
SHOW COLLATION;
参考地址:
http://blog.sina.com.cn/s/blog_9707fac301016wxm.html
http://www.2cto.com/database/201310/248493.html
http://www.cnblogs.com/zzwlovegfj/archive/2012/06/25/2560649.html
http://blog.csdn.net/ACMAIN_CHM/article/details/4174186
MySQL的字符集(Character Set)和校对集(Collate)
原文:http://lsieun.blog.51cto.com/9210464/1833478