PHP 连 MySQL 无法定义默认字符集的 BUG

转载

如果是用 MySQL 的标准客户端链接服务器,默认会读取 my.cnf 里的配置信息,有可能是这样:

[quote]
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[b]default-character-set = utf8[/b]
[/quote]

粗体部分是默认字符集,一般对于有汉字的数据库都要这么指定一下,这样连接后不用再敲一次 SET NAMES utf8

但是用 PHP 就没有这么走运了,通常不会去读,也就是说你明明在 my.cnf 里设置了,在同一台机器上用 mysql 命令行登录是 utf8,但是用 php 连接却还是 latin1(检验方法是 SHOW SESSION VARIABLES LIKE 'character_set_connection';),奇怪的是服务器端设了 init_connect 之类的也不好使

这个问题被同事刘涛轻易的找到的解决方法 [url]http://ftp.ispconfig.be/pub/ovh/php5-ovh/files/[/url]

MySQL 的 libmysql BUG 描述 [url]http://bugs.mysql.com/bug.php?id=19292[/url]

其实这个问题也并不是很严重,无非是 PHP 代码里之前多写了几行、每个链接开销多那么零点几毫秒或者是更少的时间。不过目前公司的服务器上每天要跑几千万个 SET NAMES utf8 这条无意义的 query,看着终究是不爽,这么一改算是一劳永逸了。