为PHP设置默认的MySQL连接字符集(在RHEL中)?

我们在运行Gentoo Linux的旧服务器上运行了一百个左右的传统PHP网站。 在build立这些网站时, latin1仍然是PHP和MySQL中常见的字符集。

为了确保那些较旧的站点默认使用latin1 ,同时仍允许较新的站点使用utf8 (我们当前的标准),我们在php.ini中设置默认的连接字符集:

mysql.connect_charset = latin1 mysqli.connect_charset = latin1 pdo_mysql.connect_charset = latin1 

具体的更现代的网站可以在自举代码中覆盖这个:

 <?php mysql_set_charset("utf8", $dsn ); 

…一切都很好。

现在服务器超负荷了,我们不再使用这个托pipe服务器了,所以我们把所有这些站点都转移到了我们的标准托pipe服务器上的一个更快的服务器上,这个服务器使用RHEL 5作为他们select的操作系统。

在设置这个新的服务器时,我惊奇地发现*.connect_charset指令是PHP的Gentoo特定补丁,而RHEL的PHP​​版本不能识别它们! 现在我该如何设置PHP连接到MySQL的拉丁文字符集?

我想在my.cnf中设置一个默认值,但希望强制每个应用程序和客户端都默认为latin1。 我们的政策是使用utf8,我们只想限制例外PHP。 此外,转换每个遗留网站以正确使用utf8是不可行的,因为许多触摸和你打破了一种。 我们根本没有时间去解决所有问题。

我如何设置一个默认的mysql / mysqli / pdo_mysql连接字符集为latin1为PHP,而仍然允许个别脚本覆盖这与mysql_set_charset()utf8?

这可能会做你以后的事情吗?

 mysql_query('SET NAMES latin1'); 

(最好是后来build立数据库连接。)

那么,经过一些search后,出现了mysql * .connect_charset是一个Gentoo特定的补丁。 我发现没有办法用RHEL的默认PHP包或Zend Server的PHP堆栈获得相同的特定行为。

我使用默认的MySQL来使用latin1,因为这个服务器上的大多数站点都是遗留的。 新网站有明确的字符集定义,所以他们将覆盖默认。

default_charset = "latin1"应该做的伎俩,放在php.ini内。

编辑:这显然是不完全相同的事情,所以你可能有更好的控制通过使用这个.htaccess指令的每个旧域:

AddDefaultCharset ISO-8859-1虽然我还没有testing过。