PHP « Проблема сохранения русского текста в mysql базу

Всем привет! Есть сайт на котором пользователи могут в своем профиле указывать свои личные данные, в основном они сохраняются нормально, но иногда бывает сохраняются в таком виде: "Рі.Донецк". Хотя сразу после подключения к БД выполняется запрос SET NAMES cp1251, и на стороне сервера прописана кодировка windows-1251. Может ли быть что у некоторых пользователей как то настроен браузер, что при оправке формы он русские символы передает не в той кодировке?

1 ответов


В mysql.cfg или my.cnf(linux) пропиши:
в [mysqld]

default-character-set=cp1251
character-set-server=cp1251
init-connect="SET NAMES cp1251"
skip-character-set-client-handshake

И перезапусти службу\демона mysql

А вообще я бы советовал хранить в utf8


Не знаю, что вы имели в виду под "на стороне сервера прописана кодировка windows-1251" Но если не то же, что и у меня, то попробуйте вот так:

Заставьте браузер принять кодировку сайта как cp1251


<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
...
</head>
 

Хотя было бы замечательно, если бы все уже работали с utf-8, чего и вам советую.

или\или:
- поправить в базе кодировку столбца
- добавить при старте: mysql_query('SET NAMES cp1251');
- - проверить в какой кодировке сохранен php файл


SET NAMES cp1251 не всегда достаточно

Мне помогали в своё время (пока не перешел на utf-8) и помогают сейчас при работе с чужими проектами:

mysql_query("SET character_set_connection='cp1251'");
mysql_query("SET character_set_database='cp1251'");
mysql_query("SET character_set_results='cp1251'");
# mysql_query("SET character_set_server='utf8'");
# mysql_query("SET character_set_system='utf8'");
# mysql_query("SET character_set_client='utf8'");

Обычно все сразу их использовать нет необходимости. Хватает и первых трёх.
Вместо cp1251, естественно, иногда надо прописывать utf8