За последние 24 часа нас посетили 16473 программиста и 1677 роботов. Сейчас ищут 855 программистов ...

Кодировка в БД

Тема в разделе "MySQL", создана пользователем Apocalipsis Game, 28 июн 2015.

  1. Apocalipsis Game

    Apocalipsis Game Новичок

    С нами с:
    28 апр 2015
    Сообщения:
    5
    Симпатии:
    0
    На Денвере все отлично работает
    Импортировал на хостинг, началось не понятное.
    Менял разные кодировки, страничка выводиться из бд то треугольники, то знак вопроса, то только русский не выводиться.
    А то все выводиться но в БД все тектсы и варчары на хз каком языке написаны
    Я чесно читал но не чего не понял, дайте может еще ссыль какую почитать.
    ВВодные
    Хостинг:
    MySQL-кодировка: UTF-8 Unicode (utf8)
    Сопоставление соединения с MySQL: utf8_general_ci
    Сравнение сп1251_бин
    В каком формате загружать на хостинг БД
    Да в Скрипте еще стоит строка
    mysql_query("SET NAMES cp1251");
    Или просто где почитать на нормальном языке?
    Спасибо
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    на самом деле заголовок темы некорректный. проблема не в базе, а на страничке.

    в set names указывается кодировка твоей странички — какой ее видит браузер. обычно она та же, что и в базе. но такого жесткого требования нет.
    set names просит сервер БД перекодировать данные на лету в ту и в обратную сторону без усилий с твоей стороны.

    так что остается выяснить делаешь ли ты страничку в 1251 или просто не понимаешь что именно ты делаешь.

    Добавлено спустя 1 минуту 50 секунд:
    p.s. Денвер славится тем, что по умолчанию подставляет в страничку заголовок с charset windows-1251. например вот здесь описана проблема. за это надо Котерову руки отпилить! XXI век на дворе, а они, сцуко, навязывают школьникам восьмибитные кодировки.
    получается на денвере ты приспопобился к его "особенностям", а реальность отличается от этой "песочницы".

    на хостингах, слава макаронам, никаких кодировок по умолчанию нет. всё прогрессивное человечество считает UTF-8 основной кодировкой, но если объявишь иные заголовки, будут работать они. без помех!

    советую сначала изменить "песочницу", чтобы она больше походила на реал и научиться работать в utf-8, затем выкладывать код на хостинг без доп. правок.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    … а дальше, Максим, надо перегрузить сервер. после чего, станет возможно явно управлять кодировкой страницы — как захочешь.

    пожалуйста, не пиши в личку о своих затруднениях. форум для публичного обсуждения. тут все такие, стесняться некого.
     
  4. Apocalipsis Game

    Apocalipsis Game Новичок

    С нами с:
    28 апр 2015
    Сообщения:
    5
    Симпатии:
    0
    Перезагрузил, в ДЕНВере все нормально отображаеться,
    Заливаю скрипт на хостинг импортитую БД в кодировке UtF-8
    В скрипте изменил mysql_query("SET NAMES UtF-8");
    В браузере не отображаеться русский, вместо текста знаки вопроса, до этого были знаки вопроса в треугольнике.
    В самом Денвере все отлично. На Хостинге проблемма вот такая,
    Просто я все время в денвере работал, и впервой решил на хостинг залить, думал просто, а тут с кодировкой не мойми что твориться
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Ок. Быстро не получилось, придется немного теории изложить.

    Браузер и сервер обмениваются сообщениями: запрос-ответ-запрос-ответ…. В каждом сообщении присутствуют т.н. "заголовки", которые буквально на страничке не отображаются, но которые браузер использует чтобы правильно вывести контент. Каждый заголовок это отдельная строка. А после двух пустых строк начинается собственно контент.

    Если в заголовке указано, например:
    Код (Text):
    1. Content-type: image/jpeg
    то браузер понимает, что дальше будет картинка. А если
    Код (Text):
    1. Content-Type: text/html; charset=utf-8
    ну ты понял :)

    Так вот, вебсервер Апачи, который входит в состав Денвера, имеет необязательную настройку AddDefaultCharset с которой сервер начинает "помогать" тебе формировать заголовки. Избавься от этой помощи и отсылай свои заголовки с указанием нужной тебе кодировки — хочешь windows1251, а хочешь utf-8, дело твоё.

    По приведенной ссылке описано как явно слать такой заголовок. Попробуй. И изначально я пытался донести до тебя зачем нужен SET NAMES — затем чтобы кодировка данных из базы совпадала с кодировкой прочего текста на страничке. Независимо от того, какая кодировка в базе. База умеет перекодировать свои данные на лету!

    Тебе просто нужно использовать одну и ту же кодировку для:
    - указания в заголовке Content-type (или настройке AddDefaultCharset)
    - статического текста на странице
    - настройки SET NAMES…
    Будь внимателен и всё получится.

    Вопросы?

    Добавлено спустя 2 минуты 36 секунд:
    p.s. не наступи на популярные грабли новичка: в MySQL кодировки пишутся так: CP1251, UTF8, а в html принято писать WINDOWS-1251 и UTF-8 через черточку! Синтаксис разный, смысл один.
     
  6. Apocalipsis Game

    Apocalipsis Game Новичок

    С нами с:
    28 апр 2015
    Сообщения:
    5
    Симпатии:
    0
    Исправил в скрипте mysql_query("SET NAMES UtF-8"); на mysql_query("SET NAMES UtF8");
    Заработало.
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    пожалуйста!