我们在运行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过。