mysql character set、collation

character_set_server 是字符集,一般的字符集有utf8,GB2312,GB18030,这些都是相互独立的字符集;是对unicode的多套编码;
例如:可以这样理解unicode下的utf8与GB2312.
一个实体,人;中文名字叫 张三, 英文名字叫 six,两个名字都是描述人这个实体,只是叫法不同。
collation 比对方法,用户指定数据库如何排序,以及字符串的比较规则。

mysql有两个支持unicode的character set;
1.ucs2:使用16bits来表示一个unicode字符
2.utf8:使用1-2bytes来表示一个unicode字符
选择不同的字符集根据具体的业务决定,例如utf8表示latin字符只需要一个字节,所以当用户数据大部分是英文等拉丁字符时,使用utf8标胶节省数据库存储空间;
每一个字符集(character set)下面有若干的比较方法 (collation)
可以使用 show character set; 查看具体的collation;

言归正传:
在MySQL的体系中有三处charcter set和collation:服务器(数据),连接,客户端;
1.server端的charcter set和collation,可以分成四级逐层指定——server, database, table, column。
当MySQL存取位于某一列(column)的数据时,如果column的charcter set和collation没有指定,就会向上追溯table的;
如果table也没有指定charcter set和collation,就以database的字符集和collation作为默认值;
如果database仍旧没有指定,那么就以服务器的字符集和collation作为默认值。

起效范围从小到大。
charcter set 可以在配置文件 my.cnf 指定。如果在配置文件中没有指定,那么MySQL就会使用编译MySQL时指定的默认字符集——latin1;

一般在安装MySQL时选择多语言支持,这样,安装程序会自动在配置文件中设置default-character-set=utf8,创建的数据库,表都会默认的使用utf作为数据的字符集(同时使用utf8_general_ci作为默认collation)。
character_set_server: 服务器的字符集
collation_server: 服务器的collation
character_set_database: 数据库字符集
collation_database: 数据库的collation

2.client,对于客户端传送来的literal string(例如INSERT,UPDATE语句当中的值),MySQL需要知道它们是什么编码。同时,MySQL返回给客户端的值(例如SELECT语句的返回值),也可以按照指定的编码返回。
character_set_client: 客户端发送过来文字的字符集
character_set_results: 发送给客户端的结果所使用的字符集

3.connection。用于连接的charcter set和collation,是指MySQL在接受到客户端发送来的文本之后,转换成何种字符集,用什么规则进行比较。
如果是将文本和数据库中某个column的值比较,将优先使用该column的charcter set和collation。
character_set_connection:用于连接的字符集
collation_connection: 用于连接的collation

One thought on “mysql character set、collation

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>