MySQL国际化<1>

MySQL在字符集方面的支持还是比较完善的,不过由于平时工作一般都是使用默认的latin1字符集,所以也很少出现问题。最近打算系统的研究下,以下为笔记。

  • 定义:MySQL的国际化支持包含字符集character set(charset)和排序规则(collate)。一般来说一个charset对应有两个或者两个以上collate,如gbk字符集有gbk_chinese_ci和gbk_bin两个collate。后缀ci表示case insensitive,bin表示binary,实际上还有cs,表示case sensitive。
  • MySQL的charset和collate支持四个级别的设置,分别是server,database,table,column四个级别。除了影响存储之外,还可以影响服务端和客户端之间的交互,影响字符串是怎么处理的。
  1. 如果要更改服务端和客户端之间默认的编码方式,可以执行set names 'CHARSET';此处会在下回MySQL的国际化<2>中分解~
  2. server级别的charset和collate:只是影响创建数据库时的默认charset和collate,是由character_set_server和collation_server两个系统变量指定的,这两个变量可以在mysqld运行的时候设置;
  3. database级别的charset和collate:可以在创建数据库的时候指定数据库的charset和collate;database级别的charset和collate会影响创建表时的默认charset和collate,同时,它也标明了load data infile的chaset和collate。默认的database的charset和collate是由character_set_database和collation_database指定的。注意:当default database变化的时候,show local variables中上述两个系统变量会被更新。如果没有默认的database,那么就是系统的设置;
  4. table级别的charset和collate:指定默认的表的charset和collate,在列没有指定相应选项的时候的默认值。可通过alter修改,但是修改表的charset或collate不会影响已经存在的列的charset和collate;
  5. column级别的charset和collate:可以为char,varchar,text等字段指定charset和collate;
  6. 可以为字符串指定charset和collate:[_charset_name]'string' [COLLATE collation_name],默认是character_set_connection和collation_connection决定的。需要注意的是,_charset只是说明接下来的字符串是什么chaset,但是并不影响转意字符的解析,转意字符的解析还是由character_set_connection控制的。

posted on 2011-06-28 17:21  andrefun  阅读(979)  评论(0)    收藏  举报

导航