Создание строк, содержащих кавычки или другие специальные символы

Задача
Вы хотите создать строку, заключенную в кавычки, но оказывается, что она содержит кавычки или другие специальные символы, и MySQL ее отвергает.

Решение
Изучите правила синтаксиса, регулирующие обработку строк в запросах.

Обсуждение
Чтобы вставить строку в предложение SQL, заключите ее в кавычки:
mysql> SELECT 'hello, world';

+-------------- +
| hello, world |
+-------------- +
| hello, world |
+ --------------+

Но бывает так, что сама строка содержит кавычки, тогда, если заключить ее в кавычки «как есть», будет выдана синтаксическая ошибка:

mysql> SELECT 'I'm asleep';
ERROR 1064 at line 1: You have an error in your SQL syntax near 'asleep''
at line 1

Исправить положение можно несколькими способами:

• В отличие от некоторых других процессоров SQL, MySQL позволяет использовать как одинарные, так и двойные кавычки, так что вы можете заключить строку, содержащую одинарные кавычки, в двойные:

mysql> SELECT "I'm asleep";
+------------ +
| I'm asleep |
+------------ +
| I'm asleep |
+------------ +
Можно сделать и наоборот: заключить строку, содержащую двойные кавычки, в одинарные:

mysql> SELECT 'He said, "Boo!"';
+------------------ +
| He said, "Boo!" |
+------------------ +
| He said, "Boo!" |
+------------------ +

• Для того чтобы включить символ кавычки в строку, заключенную в кавычки того же типа, следует или продублировать кавычку, или поставить перед ней символ обратного слэша (\).


MySQL, прочитав строку запроса, уберет дополнительную кавычку или обратный слэш:

mysql> SELECT 'I''m asleep', 'I\'m wide awake';
+------------ + -------------------+
| I'm asleep | I'm wide awake |
+------------ + -------------------+
| I'm asleep | I'm wide awake |
+------------ +------------------- +

1 row in set (0.00 sec)
mysql> SELECT "He said, ""Boo!""", "And I said, \"Yikes!\"";

+------------------ +----------------------- +
| He said, "Boo!" | And I said, "Yikes!" |
+------------------ + -----------------------+
| He said, "Boo!" | And I said, "Yikes!" |
+------------------ +----------------------- +

Обратный слэш отключает специальную интерпретацию следующего за ним символа. (Происходит как бы временный уход от обычных правил обработки строк, поэтому такие последовательности, как \' и \" называют escape последовательностями.) Соответственно сам обратный слэш тоже является специальным символом, и чтобы буквально использовать его внутри строки, вы должны продублировать его:

mysql> SELECT 'Install MySQL in C:\\mysql on Windows';

+---------------------------------------------- +
| Install MySQL in C:\mysql on Windows |
+ ----------------------------------------------+
| Install MySQL in C:\mysql on Windows |
+ ----------------------------------------------+

MySQL также распознает такие управляющие последовательности, как \b (backspace, забой), \n (перевод строки, или новая строка), \r (возврат каретки), \t (табуляция) и \0 (ASCIIноль, NUL)..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
FULLTEXT поиск и короткие слова
Буквальная интерпретация метасимволов в шаблонах
Включение и исключение слов из FULLTEXT - поиска
Поиск по образцу с помощью регулярных выражений
Поиск по образцу с помощью шаблонов SQL

Вернуться в раздел: MySQL / 4. Работа со строками