Кодировка на разных серверах.

Тема в разделе "Базы данных", создана пользователем bork75, 3 авг 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. bork75

    bork75 The Team

    Регистр.:
    21 июн 2008
    Сообщения:
    1.451
    Симпатии:
    677
    Использую один и тот же скрипт на разных серверах, на одном всё нормально скрипт заносит в базу, на другом крякозябры.

    Пробовал htaccess, iconv - видно, что кодировка меняется, одни крякозябры, меняются на другие. (

    В отдаваемых HTTP всё одинаковое, кроме

    Server: nginx/0.7.67

    Server: Apache/2.0.63-lk.d (Unix) mod_ssl/2.0.63-lk.d OpenSSL/0.9.8g mod_dp20/0.99.2 mod_python/3.3.1 Python/2.5.1 mod_ruby/1.2.6 Ruby/1.8.6(2007-09-24)

    Как быть???
     
  2. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    199
    Симпатии:
    55
    Проблема с кодировкой связана с тем, что по умолчанию кодировка SQL сервера отличается на разных серверах и не совпадает с желаемой для тебя. Поэтому при переносе скрипта на другой сервер обрати на следущее (пример для cp1251, если не угадал, подставь свою:(
    1) При создании таблиц БД укажи кодировку явно: CREATE TABLE `***` (
    .....
    ) ENGINE=MyISAM AUTO_INCREMENT=100 DEFAULT CHARSET=cp1251;
    2) При соединении с БД сделай запрос SET NAMES cp1251
    3) Кодировка PHP файлов должна быть в cp1251. Открой обычным блокнотом любой файл, "сохранить как" и посмотри какую он кодировку предлагает. Всякие дамперы любят по умолчанию перевести все в УТФ-8.
    Чуть что пиши.
     
    bork75 нравится это.
  3. bork75

    bork75 The Team

    Регистр.:
    21 июн 2008
    Сообщения:
    1.451
    Симпатии:
    677
    Я сделал запрос в базе

    SHOW VARIABLES LIKE 'character%'

    Там где работает


    Variable_name Value
    character_set_client utf8
    character_set_connection utf8
    character_set_database cp1251
    character_set_filesystem binary
    character_set_results utf8
    character_set_server cp1251
    character_set_system utf8
    character_sets_dir /usr/share/mysql/charsets/

    Где не работает

    character_set_client utf8
    character_set_connection utf8
    character_set_database utf8
    character_set_filesystem binary
    character_set_results utf8
    character_set_server utf8
    character_set_system utf8
    character_sets_dir /usr/share/mysql/charsets/

    Менять типа пишут в файле my.ini (он же my.cnf) в директиве [server], а у меня доступа туда нет. Хостинг обычный, виртуальный.
     
  4. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    199
    Симпатии:
    55
    В эти файлы и не надо лазить. Там настройки глобальные, используемые по умолчанию, и тебя туда естественно никто не пустит. Но есть еще кодировка уровня соединения, устанавливается SQL запросом SET NAMES cp1251 сразу после mysql_select_db();
    делается 1 раз и действует до mysql_close().
    И посмотри чтобы таблицы создавалить с DEFAULT CHARSET=cp1251;
     
    bork75 нравится это.
  5. bork75

    bork75 The Team

    Регистр.:
    21 июн 2008
    Сообщения:
    1.451
    Симпатии:
    677
    :yahoo:

    Помогла такая связка


     
Статус темы:
Закрыта.