Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

MySQL. Фигурные скобки. Недокументированная особенность?

#mysql #sql #база_данных #mariadb


Добрый день!

Хотелось бы узнать, почему в MySQL и MariaDB (а может и в других БД) проходит такой
запрос:

SELECT * FROM table WHERE id = {some_text(some_number)};


some_text - любой текст,
some_number - любое целое число (даже отрицательное).

При этом СУБД не ругается на синтаксис, если значение соответствует регулярному выражению.
И даже возвратит результат аналогично запросу

SELECT * FROM table WHERE id = some_number;


Это какой-то специальный синтаксис или что? Спасибо.
    


Ответы

Ответ 1



В документации на 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 внутри фигурных скобок принимается произвольный текст в качестве идентификатора, значение после него интерпретируется как будто оно написано само по себе.

Комментариев нет:

Отправить комментарий