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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

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

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

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

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

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

Оффлайн Schneider

  • Участник
  • *
  • Сообщений: 173
    • Просмотр профиля
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

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

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

Оффлайн Schneider

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

Оффлайн AnrDaemon

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

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

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

  • Погонщик серверов
  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
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

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

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
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

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
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.066 секунд. Запросов: 25.