从php5.2.3以及mysql5.0.7之后SET NAMES 'utf8'这类语句将不再建议使用,而尽量要使用mysql_set_charset()函数。
如:
$conn = mysql_connect('127.0.0.1', 'root', ''); mysql_query('SET NAMES utf8' ,$conn);
此代码要修改为:
$conn = mysql_connect('127.0.0.1', 'root', ''); mysql_set_charset('uft8', $conn);
其中utf8也可以是gbk或代码页,如cp936。
该改变在PHP5.2.3的手册中有关mysql_set_charset()上已经声明:
http://cn.php.net/manual/zh/function.mysql-set-charset.php
删除该用法,一来可以避免SQL注入,二来我们来看如下完整程序:
"; //使用set names 告诉MySQL服务器, 客户端的编码 mysql_query('SET NAMES gbk' ,$conn); echo mysql_client_encoding() . "
"; mysql_query('SET NAMES cp936' ,$conn); echo mysql_client_encoding() . "
"; mysql_query('SET NAMES utf8' ,$conn); echo mysql_client_encoding() . "
"; mysql_set_charset('gbk'); echo mysql_client_encoding() . "
"; mysql_set_charset('cp936'); echo mysql_client_encoding() . "
"; mysql_set_charset('utf8'); echo mysql_client_encoding() . "
"; ?>
执行结果如下:
latin1
latin1
latin1
latin1
gbk
gbk
utf8
其实用的set names 只是告诉mysql要进行具体编码,mysql还要做一次转换,效率有所折扣。
所以各位在PHP5.2.3以上的环境中尽量不要再使用 SET NAMES 'XXX'.