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