Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Проблема с кодировками в сервере MySQL  (Прочитано 2097 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #15 : 11 Апреля 2011, 15:36:55 »
МНЕ покажите...
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн haligali

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #16 : 11 Апреля 2011, 15:53:05 »
Вот что в терминал выводит:
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | latin1 |
| character_set_connection | latin1 |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | latin1 |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+
В мире все совсем не сложно, если самому не усложнять

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #17 : 11 Апреля 2011, 16:13:48 »
В предположении, что скрипты написаны в UTF-8, в скрипте, после mysql_connect, делайте
mysql_query("SET NAMES utf8;", $db_con);

Это выставит три переменных character_set_client (кодировка запросов), character_set_connection (кодировка соединения с сервером), character_set_results (кодировка результата) в одно значение utf8 одиним махом.

В остальном всё правильно.

P.S.
Где-то видел, что можно прямо в самом MySQL на сервере задать, с какими кодировками будет подключаться пользователь, но не сделал закладку, а теперь вспомнить не могу...
« Последнее редактирование: 11 Апреля 2011, 16:15:44 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн podkovyrsty

  • Старожил
  • *
  • Сообщений: 1547
  • Content-Type: alternative
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #18 : 11 Апреля 2011, 16:17:15 »
В предположении, что скрипты написаны в UTF-8, в скрипте, после mysql_connect, делайте
mysql_query("SET NAMES utf8;", $db_con);

Это выставит три переменных character_set_client (кодировка запросов), character_set_connection (кодировка соединения с сервером), character_set_results (кодировка результата) в одно значение utf8 одиним махом.

В остальном всё правильно.

P.S.
Где-то видел, что можно прямо в самом MySQL на сервере задать, с какими кодировками будет подключаться пользователь, но не сделал закладку, а теперь вспомнить не могу...

Вот эти самые client connection и result, что в выводе выше, и есть. А еще можно профили коннекторов задавать, но это уже перебор.
Шаг за шагом можно достичь цели.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #19 : 11 Апреля 2011, 16:19:57 »
А еще можно профили коннекторов задавать, но это уже перебор.
Как? (И не перебор, если клиент отличается некоторой глупостью, как MySQL/PHP коннектор.)
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн podkovyrsty

  • Старожил
  • *
  • Сообщений: 1547
  • Content-Type: alternative
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #20 : 11 Апреля 2011, 16:49:50 »
А еще можно профили коннекторов задавать, но это уже перебор.
Как? (И не перебор, если клиент отличается некоторой глупостью, как MySQL/PHP коннектор.)
Если мне не изменяет мой склероз, то у php есть глобальные переменные под это, которые коннектору передаются.
Помню, что когда последний раз сталкивался с php во фронтенде, сначала с разработчиками пытались форматировать выдачу в мускуль коннектором и выдачей в него, но потом стало понятно, что проще сделать так, чтобы в коде изначально все "было" в определенной кодировке, и вся база тоже была в ней. Иначе умучаешся вылавливать ошибки конвертации во всей этой цепочке и писать каждый раз разные правила фильтрации.
В общем "непрозрачно".
Шаг за шагом можно достичь цели.

Оффлайн haligali

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #21 : 11 Апреля 2011, 16:53:52 »
AnrDaemon

Спасибо. Сейчас все работает как надо :)
Но
Цитировать
Почему мусор - смотрите выше. Вы нарушаете нормальную работу сервера, перекрывая его защитные механизмы своей безалаберностью..

Я не безолаберный  :-[ , я только учусь...
В мире все совсем не сложно, если самому не усложнять

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #22 : 11 Апреля 2011, 16:54:30 »
Если мне не изменяет мой склероз, то у php есть глобальные переменные под это, которые коннектору передаются.

В стандартном коннекторе нет точно.
В MySQLi вроде бы нет (не пользуюсь, просмотр php.ini ничего не дал).
В PDO_MySQL - не уверен, там через DSN коннект идёт, надо экспериментировать.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн podkovyrsty

  • Старожил
  • *
  • Сообщений: 1547
  • Content-Type: alternative
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #23 : 11 Апреля 2011, 16:58:24 »
Если мне не изменяет мой склероз, то у php есть глобальные переменные под это, которые коннектору передаются.

В стандартном коннекторе нет точно.
В MySQLi вроде бы нет (не пользуюсь, просмотр php.ini ничего не дал).
В PDO_MySQL - не уверен, там через DSN коннект идёт, надо экспериментировать.
Спрошу у разработчиков, у них документация на версию должна быть.
Шаг за шагом можно достичь цели.

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: Опять кодировки
« Ответ #24 : 11 Апреля 2011, 22:53:10 »
set names utf-8; select ....
Неверный, хотя и рабочий, ответ.

В предположении, что скрипты написаны в UTF-8, в скрипте, после mysql_connect, делайте
mysql_query("SET NAMES utf8;", $db_con);

Быстро у вас мнение поменялось :)

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #25 : 11 Апреля 2011, 23:59:36 »
set names utf-8; select ....
Неверный, хотя и рабочий, ответ.

В предположении, что скрипты написаны в UTF-8, в скрипте, после mysql_connect, делайте
mysql_query("SET NAMES utf8;", $db_con);

Быстро у вас мнение поменялось :)
Не менялось. Я сразу сказал, что совет рабочий, причём рабочий во многих случаях.
А вот конкретно место применения этого совета было выбрано неверно, это во-первых, во-вторых совет не учитывает некоторых специфических моментов, типа используемого DBAL.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: Проблема с кодировками в сервере MySQL
« Ответ #26 : 12 Апреля 2011, 00:33:00 »
Но пришли, в итоге, к тому-же. Если человек сам не смог разобраться с кодировками - в 99.99% случаев ответ будет таким. Так к чему было разводить весь сыр-бор?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #27 : 12 Апреля 2011, 00:59:23 »
Но пришли, в итоге, к тому-же. Если человек сам не смог разобраться с кодировками - в 99.99% случаев ответ будет таким. Так к чему было разводить весь сыр-бор?
Ладно, ты напросился.
1. Могла быть сбита кодировка базы. Что лечится, хотя и не безболезненно.
2. Могли быть несинхронные настройки кодировок приёма/отправления. Или могли ТРЕБОВАТЬСЯ такие настройки.
3. Уже упоминавшаяся в топике специальная обработка пользователей с правами SUPER.
4. Есть же, наконец, просто правильное решение проблемы. (И оно не такое, к которому в итоге пришли.)
Это только немногие из возможных проблем, о которых я успел подумать, пока читал топик.
Твой подход характерен для людей, страстно желающих помочь, но знающих немного, как следствие - применяющих единственный известный им способ решения ко всем встречающимся проблемам. (Как в известном анекдоте: машина встала - выйдем, хлопнем дверью, сядем, поедем дальше.)
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: Проблема с кодировками в сервере MySQL
« Ответ #28 : 12 Апреля 2011, 01:12:24 »
Мой подход характерен для практика - сначала самое вероятное, которое поможет (и будет использовано) в 99% случаев (подтверждение - этот топик).

ЗЫ Что вы сказали-бы врачу, который при опухшей руке, после удара, отправил-бы вас сначала провериться на паразитов (чисто теоретически - возможный вариант), а потом уж, через пару дней, на рентген? Или вы предпочтете именно такой подход, а иначе обвините врача в недостатке знаний, а теоретик вы наш?

Оффлайн podkovyrsty

  • Старожил
  • *
  • Сообщений: 1547
  • Content-Type: alternative
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #29 : 12 Апреля 2011, 01:18:22 »
Мой подход характерен для практика - сначала самое вероятное, которое поможет (и будет использовано) в 99% случаев (подтверждение - этот топик).

ЗЫ Что вы сказали-бы врачу, который при опухшей руке, после удара, отправил-бы вас сначала провериться на паразитов (чисто теоретически - возможный вариант), а потом уж, через пару дней, на рентген? Или вы предпочтете именно такой подход, а иначе обвините врача в недостатке знаний, а теоретик вы наш?
Вот тут и начинается холи-вар на тему UNIX-way VS Linux-way. И иже с ними.
Шаг за шагом можно достичь цели.

 

Страница сгенерирована за 0.05 секунд. Запросов: 25.