Как избежать апострофа (') в MySql? - PullRequest
125 голосов
/ 07 марта 2012

В документации MySQL указано, что это должно быть \'. Тем не менее, scite и mysql показывают, что '' работает. Я видел это, и это работает. Что мне делать?

Ответы [ 9 ]

160 голосов
/ 07 марта 2012

Документация MySQL, которую вы цитируете, на самом деле говорит немного больше, чем вы упоминаете. Там также сказано:

«'» внутри строки, заключенной в «'», может быть записано как «''».

(Кроме того, вы связались с MySQL 5.0 версии Таблицы 8.1. Специальные последовательности Escape , и текущая версия 5.6 - но текущая Таблица 8.1. Последовательности побега специальных символов выглядит очень похоже.)

Я думаю, что примечание Postgres по параметру backslash_quote (string) является информативным:

Этот параметр определяет, может ли кавычка быть представлена ​​\' в строковом литерале. Предпочтительным стандартным способом представления знака кавычек в SQL является его удвоение (''), но PostgreSQL исторически также принимал \'. Однако использование \' создает угрозы безопасности ...

Это говорит мне о том, что использование символа двойной кавычки является лучшим общим и долгосрочным выбором, чем использование обратной косой черты для экранирования одинарных кавычек.

Теперь, если вы также хотите добавить в уравнение выбор языка, выбор базы данных SQL и ее нестандартных особенностей, а также выбор структуры запросов, то у вас может получиться другой выбор. Вы не предоставляете много информации о своих ограничениях.

33 голосов
/ 07 марта 2012

Стандартный SQL использует двойные кавычки;MySQL должен принять это, чтобы быть разумно совместимым.

'He said, "Don''t!"'
8 голосов
/ 30 января 2014

Я полагаю, что user2087510 имел в виду:

name = 'something'
name = name.replace("'", "\\'")

Я также успешно использовал это.

6 голосов
/ 13 декабря 2014

просто напишите '' вместо ' я имею в виду два раза '

3 голосов
/ 07 мая 2017

Есть три способа, которые я знаю. Первый не самый красивый, а второй самый распространенный в большинстве языков программирования:

  1. Используйте еще одну одинарную кавычку: 'I mustn''t sin!'
  2. Используйте escape-символ \ перед одинарной кавычкой ': 'I mustn\'t sin!'
  3. Используйте двойные кавычки для заключения строки вместо одинарных кавычек: "I mustn't sin!"
3 голосов
/ 07 марта 2012

Вот пример:

SELECT * FROM pubs WHERE name LIKE "%John's%"

Просто используйте двойные кавычки, чтобы заключить одинарную кавычку.

Если вы настаиваете на использовании одинарных кавычек (и необходимости экранировать символ):

SELECT * FROM pubs WHERE name LIKE '%John\'s%'
0 голосов
/ 06 октября 2017

Я думаю, что если у вас есть данные с апострофом, вы можете добавить один апостроф перед апострофом

например. «Это место Джона»

Здесь MYSQL предполагает два предложения «Это место Джона»

Вы можете поставить «Это место Джона». Я думаю, что так должно быть.

0 голосов
/ 19 сентября 2017

Замените строку

value = value.replace(/'/g, "\\'");

, где значением является ваша строка, которая будет храниться в вашей базе данных.

Далее,

пакет NPM для этогоВы можете взглянуть на это

https://www.npmjs.com/package/mysql-apostrophe

0 голосов
/ 19 февраля 2013

Этот работал:

name = 'John O'Brien'
name = name.replace("\'", "\\\'")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...