The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Переход сайта с cp1251 на utf-8, !*! egik, 24-Фев-08, 04:13  [смотреть все]
Сервер на Windows 2003 R2
Apache2
perl 5.8.8
mod_perl2
Mysql51

Сохранил все конфиги Apache2, Perl-кие модули с кодировкой UTF-8.
Прописал в заголовках: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">.
В соединении с базой указываю: SET NAMES 'utf8'
В перловских модулях указываю: use utf8;
При открытии странички, текст который был написан в скриптах с кодировкой utf-8 отображается нормально, а текст из базы каракулями.

Подскажите куда рыть надо!!!

  • Переход сайта с cp1251 на utf-8, !*! felix, 11:05 , 24-Фев-08 (1)
    >[оверквотинг удален]
    >Mysql51
    >
    >Сохранил все конфиги Apache2, Perl-кие модули с кодировкой UTF-8.
    >Прописал в заголовках: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">.
    >В соединении с базой указываю: SET NAMES 'utf8'
    >В перловских модулях указываю: use utf8;
    >При открытии странички, текст который был написан в скриптах с кодировкой utf-8
    >отображается нормально, а текст из базы каракулями.
    >
    >Подскажите куда рыть надо!!!

    Сделай дамп базы в старой кодировке. Затем перекодируешь его (это обычный текстовый файл) в utf-8 и восстанавливаешь базу. Делал такое неоднократно.

    • Переход сайта с cp1251 на utf-8, !*! angra, 17:20 , 24-Фев-08 (2)
      Что такое set names вы похоже не знаете, с условиями эксплуатации мускула за пределами хомпаг не знакомы.

      Автору топика могу посоветовать внимательно просмотреть скрипты на наличие use utf8. Когда выводятся строки имеющие и неимеющие жестко поставленный флаг utf8_on, то что-либо из них превращается в крякозябры. Если use utf8 нужен для каких-либо операций, то можно ограничить его блоком.

      • Переход сайта с cp1251 на utf-8, !*! felix, 20:32 , 24-Фев-08 (3)
        >Что такое set names вы похоже не знаете, с условиями эксплуатации мускула
        >за пределами хомпаг не знакомы.
        >
        >Автору топика могу посоветовать внимательно просмотреть скрипты на наличие use utf8. Когда
        >выводятся строки имеющие и неимеющие жестко поставленный флаг utf8_on, то что-либо
        >из них превращается в крякозябры. Если use utf8 нужен для каких-либо
        >операций, то можно ограничить его блоком.

        Скрипты не при чем. У топикстартера данные из базы выводятся некорректно. А такое бывает, если html-страница уже в юникоде, а данные из базы --в koi8-r или cp1251. Еще раз -- при переходе на другую кодировку спасает dump/restore с промежуточной перекодировкой данных в dump. Перекодировку можно сделать даже в kate или kwrite.


        • Переход сайта с cp1251 на utf-8, !*! angra, 20:46 , 24-Фев-08 (4)
          >Скрипты не при чем.

          Вы действительно думаете что так хорошо знаете perl? Боюсь вас разочаровать, но если вы с чем то не сталкивались, это не значит что такого не бывает.

          >У топикстартера данные из базы выводятся некорректно. А
          >такое бывает, если html-страница уже в юникоде, а данные из базы
          >--в koi8-r или cp1251. Еще раз -- при переходе на другую
          >кодировку спасает dump/restore с промежуточной перекодировкой данных в dump. Перекодировку можно
          >сделать даже в kate или kwrite.

          Еще раз почитайте что делает set names, внимательно почитайте. У меня например есть таблицы где часть полей в utf8, часть в latin1, а часть в cp1251 и проблем не возникает. Опять таки не забывайте что конвертацию вашим методом зачастую нельзя делать в продекшеновых условиях, так как затянется она на часы, а за такое по головке не погладят.
          При этом я не отрицаю что у автора могли быть ошибки конвертации базы, но он вообще не упомянул что она конвертировалась.

          • Переход сайта с cp1251 на utf-8, !*! felix, 04:52 , 25-Фев-08 (5)
            >>Скрипты не при чем.
            >
            >Вы действительно думаете что так хорошо знаете perl? Боюсь вас разочаровать, но
            >если вы с чем то не сталкивались, это не значит что
            >такого не бывает.

            Сталкивался, но тут Вы правы. :-))
            >
            >
            >Еще раз почитайте что делает set names, внимательно почитайте. У меня например
            >есть таблицы где часть полей в utf8, часть в latin1, а
            >часть в cp1251 и проблем не возникает. Опять таки не забывайте

            ну вот для такого случая Ваш вариант как раз и подходит. А скажите, для чего нужно хранение данных в разных кодировках в одной таблице? Кроме как для возможностей корректной сортировки, больше ничего на ум не приходит.

            >что конвертацию вашим методом зачастую нельзя делать в продекшеновых условиях, так
            >как затянется она на часы, а за такое по головке не
            >погладят.

            а на резервном сервере?

            >При этом я не отрицаю что у автора могли быть ошибки конвертации
            >базы, но он вообще не упомянул что она конвертировалась.

            Ну да упоминаний не было. Было лишь сказано, что переходит с cp1251 на utf-8.

            • Переход сайта с cp1251 на utf-8 вопрос2, !*! egik, 14:58 , 27-Фев-08 (6)
              Извини что так долго не писал!!!
              MySQL я неочень знаю.

              Тогда получается я могу поставить на таблицу любую кодировку, а данные в этой таблице могут хранится в другой кодировке????

              • Переход сайта с cp1251 на utf-8 вопрос2, !*! angra, 19:24 , 27-Фев-08 (7)
                Можно все, вопрос будет ли работать :)
                Если вы скажете что поле имеет кодировку cp1251, а внутрь запихнете в utf8, то ничего хорошего не получите. Другое дело, если указано что поле в utf8, данные в нем в utf8, а обращаясь к базе вы ставите set names cp1251, то получите вы ответ в cp1251, при условии что конвертация возможна. Так что при условии конвертируемого набора символов можно писать и читать в произвольных кодировках, главное правильно указывать set names
                • Переход сайта с cp1251 на utf-8 вопрос2, !*! egik, 07:31 , 28-Фев-08 (8)
                  ну так я указывал set names utf8


                  • Переход сайта с cp1251 на utf-8 вопрос2, !*! angra, 07:41 , 29-Фев-08 (9)
                    Самый простой способ в этом разобраться сделать тестовую таблицу с указанием разных кодировок для полей и поиграться с ней записывая и считывая данные с разными set names причем делайте это в стандартном клиенте, а не в своей программе, дабы исключить лишний слой. Также стоит обратить внимание на значение таких переменных выдаваемых по \s в стандартном клиенте
                    Server characterset:    latin1
                    Db     characterset:    latin1
                    Client characterset:    latin1
                    Conn.  characterset:    latin1
                    set names меняет последние два.

                    После этого уже не тяжело будет выяснить в чем именно у вас проблема с уже существующими данными. Не исключен вариант что записаны данные в кодировке, отличной от указанной в свойствах таблицы/поля.

                    Есть еще крайний вариант - использование binary вместо char/varchar, в этом случае мускул не совершает никаких преобразований, а отдает как есть, дальше уже на стороне приложения конвертим. Однако по ряду причин такой способ нежелателен.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру