Ситуация следующая решил поглядеть что за зверь такой друпал, уж очень сказки про него понравились Имеем САБЖ, в MySQL 4.1 все таблички друпала имеют collate=utf8_general_ci. После установки локализации, которая выложена здесь на сайте, всё работает, НО есть одно большое НО - буковки "с" и "я"(русские) показываются козявками. Похожий глюк пожизни встречал при запросах к MySQL 4.1. без предварительного запроса "SET NAMES utf8;" Попробовал вылечить друпал от этой беды: залез в includes/database.mysql.inc и прописал этот запрос в функции db_connect:
Получилось следующее:
$url = parse_url($url);
// Allow for non-standard MySQL port.
if (isset($url['port'])) {
$url['host'] = $url['host'] .':'. $url['port'];
}
$connection = mysql_connect($url['host'], $url['user'], $url['pass'], TRUE) or die(mysql_error());
mysql_select_db(substr($url['path'], 1)) or die('unable to select database');
[user=mysql_query]mysql_query[/user]('SET NAMES utf8;',$connection); //Добавлено мной
return $connection;
}
После чего он ВООБЩЕ перестал работать, осыпав меня туевой хучей ошибок:
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 331.
warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 331.
warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 334.
warning: Cannot modify header information - headers already sent by (output started at /var/www/drupal.net/includes/common.inc:384) in /var/www/drupal.net/includes/common.inc on line 204.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 380.
warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 380.
warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 383.
warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 389.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.
warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.
Есть подозрение что с юникодом в друпале всё хорошо лишь на поверхности, т.е. фактически он не держит мультибайтные строки. Я прав?
Комментарии
Если в кране нет воды - виноваты в том винды.
Дело в том что когда инсталлил друпал в коде еще не было моей строчки "SET NAMES utf8;" Дропнул базу, создал заново но уже с использованием модифицированного кода - всё заработало. Всем спасибо
--
Если в кране нет воды,
Виноваты в том винды.
а cron.php в таком варианте патча работает? У меня что не получается после запуска этого файла найти русские слова в материалах сайта
в чём проблема?
1. Убери @ из начала строки.
2. Все таки imho правильнее
mysql_query("set charset utf8");
Впрочем, попробуйте и так и так.
Видите, поддержку кодировок в mysql добавили только в mysql 4.1.x (и, судя по всему, проблем от этого гораздо больше, чем удобств), поэтому прописать эту строку, значит отрубить более ранние версии. А ведь еще и 3.x встречаются.
--
USU-Lug http://usu-lug.org.ru
1) Привычка. Более того, на работоспособности скрипта это никак не скажется.
2) Сделал я так потому что читаю мануалы по MySQL 4.1 им виднее как правильнее
Я так и не понял, требуется модифицирование исходников drupal 4.6, чтобы использовать русскую локаль?
Да в случае если у тебя MySQL 4.1 при соединении необходимо устанавливать кодировку в которой будут передаваться/получаться данные.