Ох, уж эти программисты! Не любят читать мануал, хотя сами привыкли ругаться аббревиатурой «RTFM» — «Read the f*n manual», которая дословно переводится как «прочти же этот чертов мануал». Ну ладно. Был у меня на практике довольно интересный случай. Работал я системным администратором по вызову — да, да, для программистов настраивал компьютеры и сетевое обеспечение организации.
Был я в конторе нечасто, но один случай мне запомнился надолго. Там находился небольшой IT-отдел они обслуживали кассовое оборудование и всю систему продаж. Много чего крутилось в те годы на обычной MySQL — система была древняя, они ее постоянно дорабатывали.
Думаю, если бы они выбросили свою CRM и поставили какое-то готовое решение, то весь отдел разработчиков можно было смело разгонять. Но руководство было еще советское, а советский человек мыслит так — «работает, не трогай». Система была громоздкая, но работала и всех устраивала, а к программистам, которые буквально жили в офисе, уже все привыкли. Скорее всего, они там занимались параллельно какой-то работой, но не суть.
Я к этой системе особого отношения не имел, так как в мою задачу входило в основном то, что можно пощупать руками — маршрутизаторы, коммутаторы и прочее сетевое оборудование. В основном железятничал, ну и разбирался в соответствующем программном обеспечении.
Однажды я пришел в офис, чтобы заменить один из серверов, который отвечал за видеонаблюдение. Сидел, копался себе в шкафу, а краем уха слушал разговор программистов. Они бурно обсуждали ошибку, которую не могут найти вот уже целых 3 дня. С их слов, они вообще не понимали, что происходит, так как код никто не менял, а структура данных не поменялась. А в CRM (это такая система взаимоотношения с клиентами) потерялась одна важная категория. Босс рвал и метал, а разработчики лишь хлопали глазами — локально у них все работало, а вот с «живой» базой как раз нужная категория куда-то пропадала.
Говорили они между собой про id (порядковые номера) менеджеров, которые были в базе данных и про цифру 1024. Разговор был примерно такой:
— Какая-то странная цифра 1024, не находишь?
— А что тут странного?
— Ну длина результата из базы и вчера и сегодня была 1024.
— Ну и что?
— Ну как что, в 1 мегабайте 1024 килобайта же…
— И?
Слушал я про эти 1024 и мне уже самому стало интересно. Разговорился с товарищами и попросил рассказать о проблеме.
Они группируют поля с помощью GROUP_CONCAT в MySQL базе данных примерно таким запросом:
… GROUP_CONCAT( managers.value_id ORDER BY manages.pid ASC SEPARATOR '|') as all_managers"); …
На выходе должен получиться список всех номеров менеджеров в одной строке с разделителем |
1|5|6|7|9|43|31 и так далее.
Когда-то я этим увлекался и что-то помнил — должно быть ограничение создаваемой строки. И, скорее всего, оно и является 1024 символом. Предложил ребятам посмотреть документацию и оказался прав — длина строки оказалась больше, чем по умолчанию стоит в настройках базы данных. Оказывается, система писала туда всех менеджеров 1 раз, даже если они были уволены. В общем, программисты быстренько сделали так в my.ini:
group_concat_max_len = 1000000
И все заработало. Получил я премию? Нет. Но удовольствие, что решил вопрос — да. На следующей мой визит мне подарили хороший коньяк.
Вот такой вот случай из жизни.