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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

Оффлайн haligali

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Всем доброго времени суток. Я уж грешным делом начал думать что тема кракозябров для меня закрыта раз и навсегда. Ан нет, не тут то было. Ни с того ни с сего с бд (mysql) начали приходить вопросы вместо русских символов, причем очень странно. В phpmyadmin все норм отображается, дампы тоже без ошибок. Если CMS, то тоже все нормально (joomla, drupal). А вот простейшая таблица и небольшой php скрипт - выводит вопросы вместо русских символов. В консоль по запросу select тоже приходят вопросы. Я уже замучался, перерыл все файлы настроек, везде где только можно проставил юникод по дефолту, все файлы соответственно тоже в юникоде, нифига не помогает. Переустанавливать сервер, нет особого желания. Думаю проблемка может быть в переменных окружения, но лезть туда пока квалификация не позволяет.  В общем буду признателен если кто поможет.
« Последнее редактирование: 10 Апрель 2011, 13:02:49 от haligali »
В мире все совсем не сложно, если самому не усложнять

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: Опять кодировки
« Ответ #1 : 09 Апрель 2011, 23:19:46 »
set names utf-8; select ....

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: Опять кодировки
« Ответ #2 : 09 Апрель 2011, 23:45:13 »
Всем доброго времени суток. Я уж грешным делом начал думать что тема кракозябров для меня закрыта раз и навсегда. Ан нет, не тут то было. Ни с того ни с сего с бд (mysql) начали приходить вопросы вместо русских символов, причем очень странно. В phpmyadmin все норм отображается, дампы тоже без ошибок. Если CMS, то тоже все нормально (joomla, drupal). А вот простейшая таблица и небольшой php скрипт - выводит вопросы вместо русских символов. В консоль по запросу select тоже приходят вопросы. Я уже замучался, перерыл все файлы настроек, везде где только можно проставил юникод по дефолту, все файлы соответственно тоже в юникоде, нифига не помогает. Переустанавливать сервер, нет особого желания. Думаю проблемка может быть в переменных окружения, но лезть туда пока квалификация не позволяет.  В общем буду признателен если кто поможет.
Код этой "небольшой страницы" покажи.

set names utf-8; select ....
Неверный, хотя и рабочий, ответ.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн Schneider

  • Участник
  • *
  • Сообщений: 167
    • Просмотр профиля
Re: Опять кодировки
« Ответ #3 : 10 Апрель 2011, 05:39:00 »
много курил маны на эту тему.
вот выдержка из phpmyadmin-переменные

character set client    utf8
(Глобальное значение)    latin1

character set connection    utf8
(Глобальное значение)    latin1

character set database    latin1
character set results    utf8

character set server    latin1
character set system    utf8

collation connection    utf8_general_ci
(Глобальное значение)    latin1_swedish_ci

глобальное значение это значение по умолчанию параметра указанного в паре первым
как видно у меня полный разноброд идет в этом смысле, но при этом все работает!!!
Самое главное чтобы в скриптах указывать серверу в каком виде ты хочешь отправлять данные и получать ответ!
а сервер сам уже разберется, и перекодирует то что есть в базе в ту кодировку которую ты запросил и от клиента примет ответ и перекодирует пот себя на хранение.
 Главное чтобы данные которые уже попали на сервер не были восприняты уже не правильно.
Может возникнуть к примеру такая ситуация. в запросе на запись данных в таблицу кодировку не указываете, сервер берет свою кодировку по умолчанию, а она не совпадает с той в которой идут данные. на сервер сразу заливается
не то что надо. и потом чтобы данные получить в нужной виде, хоть обтанцуйся ничего не получиться(ну или придется танцевать с очень большим бубном)

Поэтому если сам хозяин сервера мускуль, выставь все кодировки в mysql.conf в те которые ты пользуешь. и в скриптах тебе не придеться вообще их указывать. если не твой, ну тогда есть одна переменная set names кажеться, которая при подключении скрипта включит сразу три параметра (уж не помню каких) в нужную тебе кодировку. и запись и чтение из базы и сами запросы сервер распознает как надо.

PS.кстати, посмотри как кодировки выставлятся в запросах CMS , и делай так же. создатели этих вещей уж точно ногу скурили на этом, вот поэтому у них все работает  ;D
А при выводе данных в html не надо забывать еще про связку кодировок веб-сервер--клиент.
то же и про консоль, и не надо лезть в переменные окружения, достаточно указать серву, какая у тебя кодировка.
« Последнее редактирование: 10 Апрель 2011, 05:47:37 от Schneider »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: Опять кодировки
« Ответ #4 : 10 Апрель 2011, 06:04:48 »
Тут нет никакого противоречия. Ты забыл подписать под переменными их значение. Не в смысле "чему они равны", а в смысле их смысла для работы с БД.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн Schneider

  • Участник
  • *
  • Сообщений: 167
    • Просмотр профиля
Re: Опять кодировки
« Ответ #5 : 10 Апрель 2011, 06:29:31 »
Тут нет никакого противоречия. Ты забыл подписать под переменными их значение. Не в смысле "чему они равны", а в смысле их смысла для работы с БД.
кому это адресовано ?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: Опять кодировки
« Ответ #6 : 10 Апрель 2011, 06:45:43 »
Тут нет никакого противоречия. Ты забыл подписать под переменными их значение. Не в смысле "чему они равны", а в смысле их смысла для работы с БД.
кому это адресовано ?
Тебе конечно. Ты же удивлялся зоопарку, творящемуся у тебя с кодировками.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 3540
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
    • dihoc.ru - контекстный вьетнамско-русский словарь
Re: Опять кодировки
« Ответ #7 : 10 Апрель 2011, 09:39:58 »
Злостное 2.4, предлагаю топикстартеру срочно это исправить.
Не опускай рук, а то пропустишь в бороду

Оффлайн haligali

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Опять кодировки
« Ответ #8 : 10 Апрель 2011, 13:00:41 »
Злостное 2.4, предлагаю топикстартеру срочно это исправить.


Цитировать
2.4. Создавать темы с неинформативным названием, например «Помогите», «Пара вопросов», «Настройка Интернета» и т. п.

Так пойдет?

Ладно, проблема решена добавлением строки в my.conf в секцию [mysqld]  skip-character-set-client-handshake До этого стояли строки default-character-set = utf8 и init-connect = "set names utf8" Почему не работало без skip-character-set-client-handshake непонятно до сих пор, вроде должно работать и без неё. :o  Ну тут как говорится: работает - забудь  ;D
« Последнее редактирование: 10 Апрель 2011, 13:03:59 от haligali »
В мире все совсем не сложно, если самому не усложнять

Оффлайн Schneider

  • Участник
  • *
  • Сообщений: 167
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #9 : 10 Апрель 2011, 16:48:50 »
интересная команда, в закладки добавил.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #10 : 10 Апрель 2011, 21:24:33 »
Ладно, проблема решена добавлением строки в my.conf в секцию [mysqld]  skip-character-set-client-handshake До этого стояли строки default-character-set = utf8 и init-connect = "set names utf8" Почему не работало без skip-character-set-client-handshake непонятно до сих пор, вроде должно работать и без неё. :o  Ну тут как говорится: работает - забудь  ;D
Уберите мусор из конфига (типа init-connect и skip-character-set-client-handshake) и настройте правильно свой скрипт и базу данных.
Если нужна помощь - пишите в этом топике, скажу, какая дополнительная информация нужна.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн haligali

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #11 : 11 Апрель 2011, 13:05:40 »
AnrDaemon
Ну вот собственно скрипт:
<?php
header
'Content-Type: text/html; charset=utf8' );
class 
dbPharma {
function __construct(){
$db_con mysql_connect("localhost","root","xxxxxxxx") or die(mysql_error());
mysql_select_db("xxxx"$db_con) or die (mysql_error());
}
}

class 
viewSelect extends dbPharma {

function __construct(){

$sql "SELECT * FROM `adresses` LIMIT 0 , 30";
$res mysql_query($sql);

echo "\n\t<h1>Выберите аптеку</h1>
\n\t<form action='' method='post' name='xxx'>
\n\t<p>Аптека:
\n\t<select name='slt' size='1'>"
;
$i=1;
while($result mysql_fetch_assoc($res)){
echo "\n\t\t<option value=".$i.">".$result['pharms']."</option>";
$i++;
}
echo "\n\t</select>\n</form>";
}
}
$test1 = new dbPharma;
$test = new viewSelect;
?>

Что тут можно настроить? И как понять настроить базу данных? Все таблицы в базе хранятся в utf8 Сравнение тоже utf8.
И почему это: init-connect и skip-character-set-client-handshake мусор ?

Буду благодарен если объясните данные ньюансы.

« Последнее редактирование: 11 Апрель 2011, 13:47:02 от haligali »
В мире все совсем не сложно, если самому не усложнять

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27327
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #12 : 11 Апрель 2011, 14:13:01 »
НИКОГДА НЕ ИСПОЛЬЗУЙТЕ РУТОВЫЙ ЛОГИН ДЛЯ РАБОТЫ!
На логины с правом SUPER не распространяются настройки локализации, прописанные в файле конфигурации.

После того, как настроите скрипты и сервер, покажите из скрипта
"SHOW VARIABLES LIKE 'character-set-%';"

Почему мусор - смотрите выше. Вы нарушаете нормальную работу сервера, перекрывая его защитные механизмы своей безалаберностью..
« Последнее редактирование: 11 Апрель 2011, 14:15:13 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн podkovyrsty

  • Старожил
  • *
  • Сообщений: 1547
  • Content-Type: alternative
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #13 : 11 Апрель 2011, 15:06:48 »
Что тут можно настроить? И как понять настроить базу данных? Все таблицы в базе хранятся в utf8 Сравнение тоже utf8.
И почему это: init-connect и skip-character-set-client-handshake мусор ?

Буду благодарен если объясните данные ньюансы.

Внутри мускуля достаточно длинная цепочка передачи данных с входа в саму базу и обратно.
На каждый узел этого механизма есть возможность указать входящую и исходящую кодировки.
Но применять эти возможно можно только для срочного прикручивания старых баз и еше в паре узкоспециализированных мест.

В нормальном проекте база должна заводится с дефолтными настройками в UTF-8, из-под ограниченного пользователя. И никаких оверрайдов.
Это вам поможет разрабатывать нормальные приложения.
Шаг за шагом можно достичь цели.

Оффлайн haligali

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Проблема с кодировками в сервере MySQL
« Ответ #14 : 11 Апрель 2011, 15:34:52 »
AnrDaemon
Ну сделал все как Вы сказали. Удалил из файла конфигурации "мусор"  Создал пользователя с ограниченными правами. Показываю из скрипта  SHOW VARIABLES LIKE - бесполезно. В браузере и в терминале вместо русских символов вопросы.
В мире все совсем не сложно, если самому не усложнять

 

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