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) Вот, ковыряюсь)