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

Статус
В этой теме нельзя размещать новые ответы.

bork75

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

Пробовал 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)

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

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], а у меня доступа туда нет. Хостинг обычный, виртуальный.
 
В эти файлы и не надо лазить. Там настройки глобальные, используемые по умолчанию, и тебя туда естественно никто не пустит. Но есть еще кодировка уровня соединения, устанавливается SQL запросом SET NAMES cp1251 сразу после mysql_select_db();
делается 1 раз и действует до mysql_close().
И посмотри чтобы таблицы создавалить с DEFAULT CHARSET=cp1251;
 
:yahoo:

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


) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;" ;
$result = mysql_query($query);


mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");

или можно просто

mysql_query( "set session character_set_server=cp1251;");
mysql_query( "set session character_set_database=cp1251;");
mysql_query( "set session character_set_connection=cp1251;");
mysql_query( "set session character_set_results=cp1251;");
mysql_query( "set session character_set_client=cp1251;");
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху