Добрый день!
Хотелось бы узнать, почему в MySQL и MariaDB (а может и в других БД) проходит такой запрос:
SELECT * FROM table WHERE id = {some_text(some_number)};
some_text - любой текст,
some_number - любое целое число (даже отрицательное).
При этом СУБД не ругается на синтаксис, если значение соответствует регулярному выражению. И даже возвратит результат аналогично запросу
SELECT * FROM table WHERE id = some_number;
Это какой-то специальный синтаксис или что? Спасибо.
Ответ
В документации на MySQL читаем:
{identifier expr} is ODBC escape syntax and is accepted for ODBC compatibility. The value is expr. The curly braces in the syntax should be written literally; they are not metasyntax as used elsewhere in syntax descriptions.
В ODBC в фигурных скобках задаются некоторые особые последовательности, такие как указание интерпретации текста как даты {d '2016-04-28'} (так же времени 't' и временной метки 'ts'). Вызова функции {fn curdate()} (так же 'call'), задания GUID {guid '00123...'}
Некоторые СУБД поддерживают этот функционал в полной мере, например MS SQL. В них работают только конкретные последовательности. В MySQL для синтаксической совместимости запросов с ODBC внутри фигурных скобок принимается произвольный текст в качестве идентификатора, значение после него интерпретируется как будто оно написано само по себе.
Комментариев нет:
Отправить комментарий