MySQL国际化<2>

MySQL客户端和服务器之间的链接是有charset和collate设置的,每一个链接的charset和collate都可以单独设置。这里的“链接”指的是:

  1. 客户端发送数据,如查询语句、插入语句等;
  2. 服务端发送响应,如结果等;

这会涉及以下问题:

  • 数据离开客户端时的charset是有character_set_client决定的;
  • 服务端接收数据之后,会将数据从character_set_client转换成为character_connection(除了使用了_chaset提示符的字符串之外)。collation_connection对于字符串之间的比较是很重要的,但是并不会影响字符串和列数据的比较,因为列的collate定义的优先级会比collation_connection的高;
  • 数据离开服务器端时的charset是由character_set_results指定的,包括数据和元数据(如列名)等。

有两个方法可以修改链接的charset:

  • set names 'charset' [collate 'collate'],等同于执行了set character_set_client = 'charset'; set character_set_results = 'charset' 以及set character_set_connection = 'x';
  • set character set 'charset' [collate 'collate']和set names ... 类似,不过是将character_set_connection设置成 character_set_database。

有时候会出现这样的情况:所有的字符集设置都是正确的,但是还是乱码了。。这时候就要考虑以下应用程序是否设置了不兼容的字符编码,比如浏览器的字符编码是否错误等。

posted on 2011-06-29 17:16  andrefun  阅读(271)  评论(0)    收藏  举报

导航