Установить код подключения MySQL по умолчанию для PHP (в RHEL)?

На более старом сервере, на котором работает Gentoo Linux, мы запустили около ста устаревших сайтов PHP. Когда эти сайты создавались, 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 );

... и все было хорошо.

Теперь сервер перегружен, и у нас больше нет этого хостера, поэтому мы перемещаем все эти сайты на более быстрый сервер у нашего стандартного хостера, который использует RHEL 5 в качестве своей выбранной ОС.

При настройке этого нового сервера я с удивлением обнаружил, что *.connect_charset Директивы - это специфический патч для Gentoo для PHP, и RHEL-версия PHP их не распознает! Теперь, как мне установить PHP для подключения к MySQL с набором символов latin1?

Я думал об установке по умолчанию в my.cnf, но предпочел бы не заставлять каждое приложение и клиент по умолчанию использовать latin1. Наша политика - использовать utf8, и мы хотели бы ограничить исключение только PHP. Кроме того, преобразование каждого унаследованного сайта для правильного использования utf8 не выполнимо, так как многие из них на ощупь, и вы добры. У нас просто нет времени, чтобы исправить их все.

Как бы я установил кодировку соединения по умолчанию для mysql / mysqli / pdo_mysql в значение latin1 для PHP, при этом позволяя отдельным сценариям переопределять это значение в utf8 с помощью mysql_set_charset()?

3 ответа

Решение

Что ж, после некоторого поиска кажется, что mysql*.connect_charset является специфичным для Gentoo патчем. Я не нашел способа получить такое же специфическое поведение с пакетом PHP по умолчанию RHEL или стеком PHP Zend Server.

Я по умолчанию использовал MySQL для использования latin1, потому что большинство сайтов на этом сервере являются устаревшими. Для новых сайтов их кодировка определена явно, поэтому они переопределяют настройки по умолчанию.

Может ли это сделать то, что вы после?

mysql_query('SET NAMES latin1');

(Желательно позвонить сразу после того, как вы установили соединение с базой данных.)

default_charset = "latin1" Должен сделать трюк, размещенный внутри php.ini.

Изменить: Это, очевидно, не совсем то же самое, поэтому вы можете иметь лучший контроль с помощью этой директивы.htaccess для каждого из этих старых доменов:

AddDefaultCharset ISO-8859-1 Хотя я не проверял это.

Другие вопросы по тегам