За последние 24 часа нас посетили 15794 программиста и 1716 роботов. Сейчас ищет 1731 программист ...

Сообщение об ошибке подключения в другой кодировке

Тема в разделе "PostgreSQL", создана пользователем Vinikon, 9 ноя 2016.

  1. Vinikon

    Vinikon Активный пользователь

    С нами с:
    9 ноя 2016
    Сообщения:
    10
    Симпатии:
    1
    Программирую недавно (около 6 месяцев). Сейчас пишу cms, использую PDO. При подключении к базе данных Postgresql выдает ошибку. Проблема не в самой ошибке, а в том, что сообщение выводится в другой кодировке - ромбики. Вот пример:
    PHP:
    1. [message:protected] => SQLSTATE[08006] [7] �����:  ���� ������ "PdoPgsql" �� ����������
    Смотрел в google, целый день ушел на поиск решения этой проблемы (чтобы сообщение об ошибке выводилось на обычном английском языке, как например в mysql в такой ситуации), но ничего конкретного не нашел. Только в одном ресурсе было сказано, что подобное возможно из-за того, что сообщение в этом случае идет через локаль windows (У меня windows). Но как решить эту проблему
     
    #1 Vinikon, 9 ноя 2016
    Последнее редактирование модератором: 9 ноя 2016
  2. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    iconv("windows-1251", "UTF-8",$value);
    такой костыль сгодится ?
     
  3. Vinikon

    Vinikon Активный пользователь

    С нами с:
    9 ноя 2016
    Сообщения:
    10
    Симпатии:
    1
    Да, конечно, это в ДАННОМ КОНКРЕТНОМ СЛУЧАЕ решает проблему. Но как это применить для общего случая. Ведь кодировка postgre в общем случае может быть и другой. Я понял уже, что причина появления этих ромбиков в том, что БД отвечает не по-английски, а в своей кодировке. Я переустановил у себя на localhost эту базу в кодировке utf-8 и все стало выводится нормально. А как быть, если сайт будет у хостера, у которого кодировка неизвестна изначально?
    Как удалось выяснить, большинство хостеров ставит эту базу в utf-8. Но в общем случае, видимо, придется узнать кодировку этой базы, например, $hostersLocal и дальше уже так:
    PHP:
    1. If($hostersLocal != 'utf-8')
    2. {
    3. $value = iconv($hostersLocal, 'UTF-8', $value);
    4. }
    Ничего другого здесь, видно, не поделать
     
    #3 Vinikon, 17 ноя 2016
    Последнее редактирование модератором: 18 ноя 2016
  4. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а мне кажется что это происходит изза того что постгришка на винде крутится - поэтому и кодировку взяла виндовскую ... ну это так мысли =)
     
  5. Vinikon

    Vinikon Активный пользователь

    С нами с:
    9 ноя 2016
    Сообщения:
    10
    Симпатии:
    1
    Я об этом и не подозревал (что такое возможно). Когда работал с mysql, все было как-то естественней, предсказуемым. Сообщения в любом случае выводились либо на английском, либо (если подключение создано) в заданной кодировке. А какие здесь "подвязки" в postgre с windows (а может и еще с чем-то?). Сейчас пока занят, когда освобожусь, постараюсь углубиться в этот вопрос - так, для общего развития, - может пригодится.
     
  6. DAGDOG

    DAGDOG Новичок

    С нами с:
    22 ноя 2016
    Сообщения:
    18
    Симпатии:
    0
    В файле .htaccess пропиши
    AddDefaultCharset UTF-8
    Закинь в корень сайта.
    Открываешь файл через Notepad++
    > Кодировки > Кодировать в utf-8 (без BOM)
     
  7. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    аххха ха = мои мысли оказались правы - сматри
    http://postgresql.ru.net/docs/win7_inst.html

    Это довольно важный шаг, ибо локаль определяет такой важный параметр как кодировка данных в базах. На картинке вы видите, что я выбрал "Russia, Russia". В этом случае, кодировка вашей БД будет windows-1251. Возможно, это именно то, что вам нужно, но большинство людей всё-таки предпочитает работать с кодировкой UTF-8. Эта кодировка будет установлена в том случае, если в данном окне вы выберите локаль по умолчанию: "by default"