@hrvasiliy

Что не так с кодировкой?

В БД установлена кодировка utf-8, на сайте такая же. Записываю в БД из текстового поля данные на русском языке. В БД вижу нечитаемые символы. Попробовал добавить перед выполнением запроса:
mysqli_query($mysqli, "SET NAMES 'utf8' COLLATE 'utf8_general_ci'");

Все работает отлично, только я задумался о том, что это лишний запрос, соответственно, лишняя нагрузка. Прочитал, что это происходит из-за того, что кодировка на сайте не совпадает с кодировкой в БД, но это не так.

Есть ли способ решить эту проблему другим путем? Раньше у меня не возникало таких проблем, может быть потому что стоял apache?
  • Вопрос задан
  • 346 просмотров
Решения вопроса 1
@neol
По умолчанию сервер mysql использует кодировку latin1.
Если я ничего не путаю, то пришедший от вас запрос в utf8 конвертируется в latin1, а затем получившаяся абракадабра (нормально utf8 в latin1 не конвертируется) конвертируется опять в utf8. На выходе получается фигня.

Добавление в my.cnf
collation-server = utf8_general_ci
character-set-server = utf8

с последующим перезапуском mysql по идее должно решить проблему.

Ну или можно добавить в тот же my.cnf
init-connect = "SET NAMES 'utf8' COLLATE 'utf8_general_ci'"


Но вообще стоит оставить приведённую вами строчку. Нагрузкой с такого запроса можно смело пренебречь, а переносимость кода будет чуть выше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
есть кодировка сайта, кодировка БД и кодировка клиента. Что у вас в my.ini написано?
сорри, в my.cnf, в [client]
Ответ написан
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
кодировка обычно выставляется сразу после коннекта к базе...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы