Jump to content


masik

Recommended Posts


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  6
  • Reputation:   0
  • Joined:  01/15/13
  • Last Seen:  

Сталкнулся с проблемой что русские имена чаров не как не создать, долго тыркался по гуглу не хотелось править сорсы, ответа не нашёл кроме как снести все и вся и поставить заного, пришлось иди в сорсы и делать такую штуку

src/common/sql.c

перед

if( !mysql_real_connect(&self->handle, host, user, passwd, db, (unsigned int)port, NULL/*unix_socket*/, 0/*clientflag*/) )

ставим

mysql_options(&self->handle, MYSQL_INIT_COMMAND, "SET NAMES 'cp1251'");

Поясняю что мы сделали, мы фактически заставили сервер работать с MySQL только с кодеровкой cp1251 так что перед тем как делать подумайте то ли вы делаете так как если у вас не cp1251 убьёте базу, или покалечите точно

База быть должна в cp1251 это понятно, если у вас utf-8 ставим utf-8

Конечно понимаю что не совсем кашерно, но работает

Edited by masik
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   9
  • Joined:  12/29/11
  • Last Seen:  

Вы изобретаете велосипед, данная настройка есть в conf файлах уже достаточно давно. В файле: conf/inter_athena.conf

// You can specify the codepage to use in your mySQL tables here.
// (Note that this feature requires MySQL 4.1+)
//default_codepage:

Снимаете закомментированость строки, чтобы получилось:

default_codepage: cp1251

Разумеется, неплохо ещё и саму базу в MySQL создавать с utf8 или cp1251 (utf-8 предпочтительней).

ps и SET NAMES это не то, что вы объяснили, SET NAMES объясняет базе MySQL в какой кодировке вы хотите с ней общаться, а не работать, работать она будет с указанной в collation. И не важно в чём у вас база, даже с utf-8 можно указывать SET NAMES cp1251, ещё раз говорю — данный запрос говорит серверу MySQL в какой кодировке работает ваш «клиент», а для себя он уже сам конвертирует в кодировку collation.

Edited by wl.illusion
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  6
  • Reputation:   0
  • Joined:  01/15/13
  • Last Seen:  

Ну я так и описал что заставляете работать сервер с кодировкой cp1251 может просто вы не так поняли или я не так изложился

но не суть

А вот за наводочку в конфиге спасибо... Я чет не нашёл, откатим сорсы, сделаем по уму, тему мож тоже удалить нафиг? А-то запутаю людей

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   9
  • Joined:  12/29/11
  • Last Seen:  

Ну я так и описал что заставляете работать сервер с кодировкой cp1251 может просто вы не так поняли или я не так изложился

но не суть

А вот за наводочку в конфиге спасибо... Я чет не нашёл, откатим сорсы, сделаем по уму, тему мож тоже удалить нафиг? А-то запутаю людей

Вы написали именно то, что я описал, ваша доработка - не нужна, она _уже_ присутствует. Ваше неспособность прочитать описание настроек .conf привела именно к той проблеме, что вы сделали, то что уже есть.

И SET NAMES это то, что я описал. Если вы по каким-то причинам не понимаете, что вы делаете, где именно у вас проблема и прочее — не повод путать людей.

Похвально, что вы интересуетесь Си, очень прискорбно, что вы его не понимаете, и ещё более прискорбно, что вы не читаете описание .conf сервера. А чтобы у нас с вами не было больше споров, то даю вам прямую наводку в src:

Открываете файл src/common/sql.c Интересующая нас функция:

int Sql_SetEncoding(Sql* self, const char* encoding)

Там внутри есть вызов функции mysql_set_character_set — гуглим и находим описание на сайте dev.mysql.com.

Читаем описание, оно на английском но достаточно понятное, могу даже выделить то, что вас интересовать должно:

This function works like the SET NAMES statement, but also sets the value of mysql->charset

Рекомендую, прежде, чем писать сорс-мод изучить внимательнее настройки Афины, чтобы не проделывать лишнюю работу и тем более, что-то выкладывать на форум, а то можно запутать новичков.

p.s. повторюсь относительно запроса SET NAMES:

Это запрос, который говорит серверу MySQL о том в какой кодировке «клиент» будет высылать данные серверу MySQL и в какой кодировке хочет эти данные получать. Сама база MySQL может быть в любой доступной кодировке (collation).

Edited by wl.illusion
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  6
  • Reputation:   0
  • Joined:  01/15/13
  • Last Seen:  

Не могу оставить спор, так как вы пытаетесь выставить меня идиотом а себя умным, я написал

мы фактически заставили сервер работать с MySQL только с кодеровкой cp1251

ФАКСТИЧЕСКИ Если мы пропишем SET NAMES cp1251 а у нас utf8 в базе, мы получим крякозяблы, сервер будет посылать ПРИНУДИТЕЛЬНО заметте, кодировку cp1251, то что вы говорите вы излагате одно и тоже другими словами, более Красивыми и умными, но сути дела не меняет

Я ещё раз говорю спасибо за то что указали где есть charset в настройках, если вы считаете что нужно штудировать каждый пункт, и знать всё и вся, то это тоже прискорбно, я нашёл решение проблеммы, нет не какой разницы прописать в настройках и указать в SRC суть одно и таже проблема=решена

Но я согласен с вами что поторопился, но когда не у кого спрашивать, то приходиться как-то самому изголяться, я Системный Администратор NIX систем у меня есть Задача и есть её решение, к сожелению так сложен ум, так как чаще приходиться работать с Бизнес решением а там главное в сроки и главное работает, другое не волнует как что зачем и почему...

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   9
  • Joined:  12/29/11
  • Last Seen:  

ФАКСТИЧЕСКИ Если мы пропишем SET NAMES cp1251 а у нас utf8 в базе, мы получим крякозяблы, сервер будет посылать ПРИНУДИТЕЛЬНО заметте, кодировку cp1251, то что вы говорите вы излагате одно и тоже другими словами, более Красивыми и умными, но сути дела не меняет

Вы не правы, после указания SET NAMES default кодировка базы данных уже не имеет значения. Посути, вы

просто говорите серверу: «Давай общаться на cp1251» и сервер начинает с вами общаться в этой кодировке.

Впрочем, я тоже немного неправ был, утверждение о SET NAMES и collation не для всех сочетаний верно. Не знаю как корректно объяснить, но по сути, поймите, если у вас правильно выставлен collation и вы отправляете запрос с кодировкой указанной в set names, то MySQL всё воспримет правильно.

SET NAMES - это просто язык транспорта. Буквально, пример, у вас collation UTF8_bin (я её чаще всего использую), но ваш клиент работает с cp1251, вы говорите сервер mysql SET NAMES cp1251 («Давай общаться на cp1251»), сервер это понимает и начинает «на лету» вам всё конвертировать. Вы даёте ему запрос в cp1251 и он при получении его конвертирует у себя в UTF8_bin, и наоборот, высылает вам запрос в cp1251, чтобы ваш клиент мог с ним корректно работать. Никаких кракозябр, никаких вопросов и прочего.

Для РО вы указываете cp1251, потому что сам клиент РО понимает только эту кодировку для русских символов, поэтому и надо делать SET NAMES cp1251, но это не означает, что база данных должна быть с collation cp1251, она вполне может быть с UTF8, что предпочтительней. И вы уж как nix админ это должны знать.

Я ещё раз говорю спасибо за то что указали где есть charset в настройках, если вы считаете что нужно штудировать каждый пункт, и знать всё и вся, то это тоже прискорбно, я нашёл решение проблеммы, нет не какой разницы прописать в настройках и указать в SRC суть одно и таже проблема=решена

Да, именно штудировать каждый пункт один раз в жизни, учитывая, что там всё написано доступным языком и этих пунктов в conf не наберётся даже с полусотни, а те, которые важны и вообще с десяток. Это избавит вас от неловкой ситуации, когда вы что-то делаете, а это уже есть, учитывая, что вы даже использовали не ту команду Си (ничего страшного нет, но есть решение предусмотренное разработчиками MySQL и правильнее его использовать).

Один раз в жизни прочитать мануал, а не делать глупости — настроил и забыл, а вы ещё исходники копали, придумывали решение. Заняло бы это одинаковое кол-во времени, может ещё чего полезного нашли бы.

Но я согласен с вами что поторопился, но когда не у кого спрашивать, то приходиться как-то самому изголяться, я Системный Администратор NIX систем у меня есть Задача и есть её решение, к сожелению так сложен ум, так как чаще приходиться работать с Бизнес решением а там главное в сроки и главное работает, другое не волнует как что зачем и почему...

Я программист C/C++, PHP, Python, системное администрирование nix серверов. В мои задачи входит разработка биллинг системы (работа с большим числом клиентов), сопровождение САПР, настройка веб и прочего связанного с этим, кроме того я фрилансю в доработке чужих проектов (исправление чужих косяков, доработка проекта «до ума», внедрение новых решений в чужие проекты). Что меняется? Я говорю вам, что вы не правы и указываю точно, где именно не правы, и меня удивляет с какой лёгкостью вы хвастаетесь, что вы системный администратор каких-то бизнес-решений, но при этом не понимаете элементарных вещей, более того, пытаетесь убедить в том, что создание «костыля» в месте, где решение уже предусмотрено разработчиками — обосновано. А ваша проблема была в том, что вы неосилили всего несколько conf файлов, что для любого уважающего себя системного администратора — просто неприемлимо.

Вот за такими «пофигу как, но успеть в срок» — мне потом косяки и приходится тоннами выгребать :)

А спросить есть где, тут русское сообщество полумёртвое, никто не спорит, но англоязычное вполне себя хорошо чувствует и написать пару слов на ломаном английском я думаю вы смогли бы. Подобное решение вашему я писал в 2008 году, когда не было ещё default_codepage в настройках (увы), но в 2010 я был очень приятно удивлён, когда полез снова ставить для себя и друзей сервер, а в настройках обнаружил этот пункт.

И поймите, у меня нет ничего личного к вам, я просто развожу ликбез, чтобы вы и другие читатели понимали основы, раз уж полезли в сорцы.

Edited by wl.illusion
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  6
  • Reputation:   0
  • Joined:  01/15/13
  • Last Seen:  

Надеюсь я не обидел вас и не чего такого, не хочу не ссориться не разводить споры, по поводу СИ вы правы я не хрена в нем не понимаю все делаю интуитивно ну и Google :) ну и конечно был не прав, приношу извинения.

Давайте не будем ссориться и закроем эту тему.

А вот поповоду того что вы C++ фрилансер это очень и очень интересно, не могли бы вы скинуть мне контакт, у меня есть интересная работа с неплохим заработком, или сразу в мой скайп чирканите masikmos

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   9
  • Joined:  12/29/11
  • Last Seen:  

Надеюсь я не обидел вас и не чего такого, не хочу не ссориться не разводить споры, по поводу СИ вы правы я не хрена в нем не понимаю все делаю интуитивно ну и Google :) ну и конечно был не прав, приношу извинения.

Давайте не будем ссориться и закроем эту тему.

Простите, если обидел вас, я уже говорил, что ничего личного — простой ликбез, так что, если задел, приношу извинения.

А вот поповоду того что вы C++ фрилансер это очень и очень интересно, не могли бы вы скинуть мне контакт, у меня есть интересная работа с неплохим заработком, или сразу в мой скайп чирканите masikmos

Ваши контакты я записал, но сейчас со временем могут быть сложности, мои контакты есть в профиле, в скайпе я всегда в «красном» статусе, но это ничего не значит — я вполне могу быть онлайн.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...