首先,明确一下字符集和校对规则的概念:
字符集(charset):是一套符号和编码
校对规则(collation):是在字符集内用于比较字符的一套规则,比如有的规则区分大小写,有的则无视
mysql服务器能够支持多种字符集,可以使用SHOW CHARACTER SET语句列出可用的字符集。如果希望列出一个字符集的校对规则,可以使用SHOW COLLATION语句。例如,如果希望查询以latin1开头的校对规则,可以使用如下语句SHOW COLLATION LIKE 'latin1%'。任何一个给定的字符集至少有一个校对规则,当然也可能存在多个校对规则。校对规则一般有如下特征:
- 两个不同的字符集不能有相同的校对规则;
- 每个字符集有一个默认校对规则;
- 存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。
具体来说,我们系统使用的是utf8字符集,如果使用utf8_bin校对规则执行sql查询时区分大小写,使用utf8_general_ci 不区分大小写。不要使用utf8_unicode_ci。如create database demo CHARACTER SET utf8; 默认校对规则是utf8_general_ci 。
mysql服务器中有六个关键位置使用了字符集的概念,它们分别是:client 、connection、database、results、server 、system。
- client是客户端使用的字符集,相当于网页中的字符集设置<meta http-equiv="Content-Type" content="text/html; charset=utf-8">。
- connection是连接数据库的字符集设置类型,如果php没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
- database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
- results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
- server是服务器安装时指定的默认字符集设定。
- system是数据库系统使用的字符集设定。
system一般默认是utf-8字符集,server是最高的字符集设定,database没有单独设定就按照server的字符集设定。数据库内的每个表和字段也都有字符集的概念,一般都是根据上一级结构决定自身的字符集,比如表就根据database库的设定决定自己的字符集,字段根据表来决定自己的字符集。
有关中修改mysql表、字段、库的字符集可见:http://fatkun.com/2011/05/mysql-alter-charset.html
Unicode与UTF8
Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储.
UTF8字符集是存储Unicode数据的一种可选方法。 mysql同时支持另一种实现ucs2。
如今,大多数网站开发都会选择UTF-8,因为它是世界性通用代码,可以完美的支持中文编码。
如果对编码还不太清楚的话,推荐看这边文章,其中简要介绍了编码的来历,个人觉得很不错:http://www.jb51.net/web/25623.html