xupypr [dot] com My Garden is well, how is yours?

18Окт/110

Я и MySQL. История одного бага.


Недавно мне было необходимо внести изменения в небольшой проект. Проект крутился на старенькой машинке с Ubuntu 9.10 Server, был написан на PHP5 с БД MySQL(5.0) (данные в базу складывались в кодировке cp1251) пару лет назад и успешно работал (хоть и был написан прямо скажем криворуко и неоптимально (зато быстро)). Так вот, работал он себе и работал, пока не надо было в него добавить обработку форм нового вида (программа занималась обработкой результатов экспорта результатов распознавания форм из Form Reader).

Были внесены небольшие правки, после чего проект перестал импортировать данные. Что такое? Решил разобраться дома: принёс проект, установил (та же связка PHP(5.3), MySQL(5.1)  но на Windows Vista). Я был очень удивлён, когда проект заработал без каких либо признаков багов. Я доработал его в соответствие с новым ТЗ и понёс выкладывать обновления на продуктив.

И что же? Я был удивлён вдвойне, когда код, идеально работавший на домашней машинке, отказался работать с теми же симптомами. Чтож, начал копать глубже. Обратил внимание что все старые запросы работают корректно. Запросы по новой схеме не работают когда в тексте запроса есть русские буквы.

Итак, первая зацепка. Сразу хочу сказать что особенностью проекта было названия таблиц и столбцов таблиц на кириллице (да, за это я бы сейчас предложил делать чубаккование (отрывание внешних конечностей с опциональным их поеданием), но сейчас не об этом). Отдебагал код PHP - запросы генерируются корректно, более того если эти запросы выполнить в phpMyAdmin`е - они корректно отрабатывали, а вот сам код PHP получал пустой ответ на запрос. Значит дело в MySQL, подумал я, и начал изучать форумы.

Где то краем глаза зацепил, что мои коллеги нашли интересный баг. MySQL ни в какую не хотел обрабатывать русскую маленькую букву "я". Я призадумался: как раз в новых шаблонах появилось поле "Фамилия". Ловким движением "Фамилия" превратилась в "Фамили" и код успешно заработал (по непроверенным источникам ошибка возникает из-за того что буква "я" имеет код 255 и поэтому не воспринимается MySQL-ем).

Тут есть одно из упоминаний это проблемы:
http://bugs.mysql.com/bug.php?id=27570

Выводы:

  1. Рекомендую использовать только латиницу в названиях таблиц и столбцов в базе данных
  2. Если нельзя, но очень хочется, то можно. В этом случае не используйте букву "я" в названиях таблиц/столбцов таблиц - это, возможно, сэкономит вам массу времени, которое может уйти на дебаг работающего кода.
Комментарии (0) Пинги (0)

Пока нет комментариев.


Leave a comment

Нет обратных ссылок на эту запись.