Проблема с запросом - перестал работать сам собой.

Oskaria
Дата: 20.12.2012 17:49:41
Суть такая - существует биллинговая система, которая делает выгрузку в формате понятном Word-у и делает своими методами. В общем данные она получает из базы, используя запросы, описанные в файле.

Есть запрос:
%serv%,%login%:select if(s.service_name='Предоставление доступа к сети Интернет','Предоставление доступа к сети Интернет. Логин: ',if(s.service_name='ТДМ Телефония','Абонентское обслуживание телефонного номера ','')),if (v.login like '%Дополнительный IP%',concat('Предоставление дополнительного IP адреса ', substr(v.login FROM 25)),v.login) from vgroups v,settings s where v.vg_id=@VG_ID and v.id=s.id

Я не так хорошо знаю SQL, поэтому хз что тут из него, а что кастомное из биллинга, поэтому поясню - данные из запроса водятся в %serv% и %login%.

Запрос работал-работал, 2 месяца, а сегодня выдал ошибку:

20.12.2012 16:47:20 ERROR 0x805450cc0 [do_sql_query] MySQL query failed with error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"Предоставление доступа Рє сети Р˜РЅС‚РµСЂРЅРµС‚. ЛоР' at line 1

Query: "select if(s.service_name="Предоставление доступа Рє сети Р˜РЅС‚РµСЂРЅРµС‚","Предоставление доступа Рє сети Р˜РЅС‚РµСЂРЅРµС‚. ЛоР\іРёРЅ".

Иероглифы потому, что логи в формате ANSI а файл с запросами - в UTF8.

Вроде ругается на синтаксис, но с ним проблем нет. Что делать - ума не приложу. Пробовал ковычки менять, переписал запрос заново - до лампочки. Прощу помощи и знатоков MySQL - что может быть за проблема?
ЗЫ: версию сервера не меняли, ничего на сервере не обновляли.
miksoft
Дата: 20.12.2012 17:57:52
select
if(s.service_name='Предоставление доступа к сети Интернет','Предоставление доступа к сети Интернет. Логин: ',if(s.service_name='ТДМ Телефония','Абонентское обслуживание телефонного номера ','')),
if (v.login like '%Дополнительный IP%',concat('Предоставление дополнительного IP адреса ', substr(v.login FROM 25)),v.login)
from vgroups v,settings s
where v.vg_id=@VG_ID
  and v.id=s.id
Попытался отформатировать. Вместо вложенных if-ов было бы намного читабельнее использовать CASE.

И при просмотре лога вам ничего не мешало переключить кодировку просмотра

По сути - мне кажется или строковые кавычки изменились с одинарных на двойные?
Oskaria
Дата: 21.12.2012 09:45:05
С ковычками я написал - я пытался их менять, и такие ставил, и другие ставил, наобум, скажем так)
Oskaria
Дата: 21.12.2012 10:16:26
Неа, всё равно ругается... Я подумаю сначала, что дело в русском тексте, попробовал заменить на английский - всё равно ругается. Убрал двоеточие после "Логин" - начал ругаться на другой текст в ковычках. Непонятно))
Oskaria
Дата: 21.12.2012 11:11:18
А если разбиваю на строки:

  %serv%,%login%:select 
                  if(s.service_name='Предоставление доступа к сети Интернет','Предоставление доступа к сети Интернет. Логин: ',if(s.service_name='ТДМ Телефония','Абонентское обслуживание телефонного номера ','')), 
                  if (v.login like '%Дополнительный IP%',concat('Предоставление дополнительного IP адреса ', substr(v.login FROM 25)),v.login) 
                  from vgroups v,settings s 
                  where v.vg_id=@VG_ID and v.id=s.id


То ругается:
MySQL query failed with error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
miksoft
Дата: 21.12.2012 11:52:28
Oskaria,

1) Разберитесь что за %serv%,%login%: в начале запроса, как эта часть правильно пишется и т.д. Видимо, эту часть обрабатыает что-то еще до отправки запроса в MySQL.

2) Попробуйте все русские буквы заменить на латинские.

3) Попробуйте убирать части запроса (начиная с тех, где есть русский текст), до того момента как пропадет ошибка. Выявите проблемное место.
Oskaria
Дата: 21.12.2012 15:26:41
1) это переменные, причём из языка SQL, как выяснилось
2) Пробовал - 0 эмоций
3) Вот, ковыряюсь)
miksoft
Дата: 21.12.2012 16:08:10
Oskaria
1) это переменные, причём из языка SQL, как выяснилось
Нет, это ваше локальное изобретение. Или, может быть, каких-то библиотек, которые вы используете.