Создал на локальной машине тестовую версию сайта. Выложил в Интернет. Возникли неприятные (и пока не понятные мне) косяки:
1. Страницы упорно показываются в кодировке Кирилица (Windows-1251), хотя сами они в кодировке UTF-8 и везде указан соответствующий метатег:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2. Практически на каждой странице вылазит варнинг MySQL (в красной рамочке или вне хтмл) типа:
user warning: Duplicate entry '0' for key 1 query: INSERT INTO om_locales_source (location, source) VALUES ('/catalogue', 'Send') in /usr/home/railinformru/www/includes/database.mysql.inc on line 172.
Что бы это, черт возьми, могло значить? : (
Может я неправильно базу портировал?
Помогите, пожалуйста, советом. Хотя бы куда можно смотреть.
Комментарии
посмотрите, в какой кодировке таблицы и база - должно быть в UTF8. Хотя судя по ошибке, проблемы с версиями баз - посмотрите, может у вас версия была 4.1, а на сервере 4.0 - несмотря на похожесть, это глобально очень различные версии. И расскажите, как переносили, чем?
Здравствуйте, jason32!
Спасибо за ответ.
1. с 1м вопросом проблема в том, что в http-заголовке ответа передается Content-Type: text/html; charset=windows-1251, что заставляет браузер игнорировать фактическую кодировку и метатег (это, видимо, какая-то настройка Апача; я уже пообщался с хостером, он пообещал решить).
2. со 2м вопросом: действительно, проблема скрыта здесь. На локалке у меня стоит версия 5.0.20a-nt, у хостера (та в которую я ломился) 3.23.36 (древний выделенный сервак, про который все давно забыли, и он никого не беспокоил). С переносом возникали проблемы. Переносил я так: через phpmyadmin сделал дамп на локалке, потом этот же phpmyadmin перенастроил на удаленный сервер и залил этот же дамп. Т.к. при загрузке возникали проблемы, при экспорте пришлось выбрать "Режим совместимости SQL=MySQL323" и вручную поудалять у всех создающихся таблиц "TYPE=InnoDB".
Сейчас поставлена версия 4.1.9. новый дамп (без извращений) залился без проблем. Но возникли другие проблемы.
1) Для базы указано "MySQL-кодировка: Windows Cyrillic (cp1251)" и в результате весь текст битый. Эту кодировку по-умолчанию можно как-нибудь изменить для отдельной базы? Или надо будет запускать отдельный сервер MySQL?
2) Плюс к тому при первом заходе на страницу вылезают какие-то странные варнинги, типа:
user warning: Access denied for user 'myusername'@'localhost' to database 'mydb' query: LOCK TABLES om_cache_filter WRITE in /www/includes/database.mysql.inc on line 172.
При перезагрузке страницы варнинг пропадает. С чем это может быть связано?
Интересно, что на 3.23.36 (лезли варнинги), но текст хранился и выдавался в правильной кодировке (если в браузере выбиралась правильная кодировка, то получался читабельный текст). Сейчас не так (выбор в браузере кодировки абракадабру не устраняет).
мда , вот таких проблем отродясь не видел, какой то прикольный у тебя хостинг - не лучше ли сменить на нормальный? Для отдельной базы можно менять кодировку, но реально влияют кодировки таблиц - это более важно, тут при импорте надо смотреть, чтобы кодировка была указана, а так как кодировка работы браузера тоже влияет - то надо обязательно при заходе в phpmyadmin следить, чтобы он работал в UTF - формате - тогда меньше проблем намного при импорте и экспорте.
Ну, это, собственно, хостинг заказчика (на котором он давно обитается и к общению с которым привык (или, может, даже аффилирован)).
Короче, продолбался весь день (слабое знание инструмента налицо : ( , пользовательский уровень, настройками не занимался). Менял кодировку для баз, для таблиц... чего только не делал... темна вода!... причем тестировал все это через phpmyadmin, drupal и простейший скрипт выводящий на печать таблицу node - результаты всюду разные : (((( Короче, методом тыка и рысканья в нете придумал "решение": в исходный дамп pma в самом начале вставил строчку
SET NAMES utf8;
(Строчку позаимствовал из дампа сделанного через mysqldump, сам этот дамп pma понимать отказался). После чего русские буквы стали отображаться. При этом глядел переменные MySQL командой SHOW VARIABLES - никаких различий (то же самое и в pma). Короче, шаманство с бубном. Что, почему - не понятно. А когда непонятно, наверняка в процессе что-нибудь отвалится (когда база уже будет 500 тонн весить). : (
В функции Drupal includes/ database.mysql.inc : db_connect() эта команда для версий базы 4.1 и выше тоже присутствует. Почему она не имеет действия тоже неясно... или имеет, просто база в pma без этой команды как-то криво заливается (хотя pma показывает utf8 у базы и таблиц)...
пойду лучше спать.
PS: jason32, спасибо за отклик и полезные хинты!