1.9.4.7 Символы `--' как начало комментария
В некоторых отличных от MySQL базах данных SQL символы `--' используются
как начальные символы комментариев. В сервере MySQL символом начала
комментариев является `#'. Для сервера MySQL можно также использовать
стиль комментирования из C: /* this is a comment */
(see section 6.1.5 Синтаксис комментариев).
В версии сервера MySQL 3.23.3 и выше поддерживается комментирование с
помощью символов `--' - при условии, что за комментарием следует пробел.
Это объясняется тем, что данный стиль комментирования вызвал много проблем
при автоматической генерации SQL-запросов, в которых присутствовал код,
подобный приведенному ниже (величина платежа вставляется в выражение
!payment!
автоматически):
UPDATE tbl_name SET credit=credit-!payment!
Давайте представим себе, что произойдет в случае, если величина payment
окажется отрицательной. Поскольку выражение 1--1
в SQL является
допустимым, то просто страшно себе вообразить последствия в случае, если
будут разрешены комментарии, начинающиеся с `--',
Использование нашей реализации этого метода комментирования в версии
сервера MySQL 3.23.3 и выше - в форме 1-- This is a comment
- является
действительно безопасным.
Существует еще один безопасный способ решения этой проблемы. Он
заключается в том, что клиент командной строки mysql
удаляет все строки,
начинающиеся с `--'.
Приведенная ниже информация относится только к работе более ранних, чем
3.23.3, версий MySQL.
Если ваша SQL-программа представлена в виде текстового файла, содержащего
комментарии `--', необходимо использовать:
shell> replace " --" " #" < text-file-with-funny-comments.sql \
| mysql database
вместо обычного:
shell> mysql database < text-file-with-funny-comments.sql
Можно также отредактировать сам командный файл, заменив комментарии `--'
комментариями `#':
shell> replace " --" " #" -- text-file-with-funny-comments.sql
Привести эти комментарии к первоначальному виду можно с помощью следующей
команды:
shell> replace " #" " --" -- text-file-with-funny-comments.sql
Add your own comment.