Как экранировать кавычки в sql

от admin

How do I escape a single quote in SQL Server?

I am trying to insert some text data into a table in SQL Server 9.

The text includes a single quote ‘ .

How do I escape that?

I tried using two single quotes, but it threw me some errors.

eg. insert into my_table values(‘hi, my name»s tim.’);

14 Answers 14

Single quotes are escaped by doubling them up, just as you’ve shown us in your example. The following SQL illustrates this functionality. I tested it on SQL Server 2008:

Results

If escaping your single quote with another single quote isn’t working for you (like it didn’t for one of my recent REPLACE() queries), you can use SET QUOTED_IDENTIFIER OFF before your query, then SET QUOTED_IDENTIFIER ON after your query.

Dale K's user avatar

PaulMcG's user avatar

Many of us know that the Popular Method of Escaping Single Quotes is by Doubling them up easily like below.

Doubling the Single Quotes Method

we are going to look on some other alternate ways of escaping the single quotes.

1. UNICODE Characters

39 is the UNICODE character of Single Quote. So we can use it like below.

UNICODE Characters

2. QUOTED_IDENTIFIER

Another simple and best alternate solution is to use QUOTED_IDENTIFIER. When QUOTED_IDENTIFIER is set to OFF, the strings can be enclosed in double quotes. In this scenario, we don’t need to escape single quotes. So,this way would be very helpful while using lot of string values with single quotes. It will be very much helpful while using so many lines of INSERT/UPDATE scripts where column values having single quotes.

QUOTE_IDENTIFIER

The above mentioned methods are applicable to both AZURE and On Premises .

Arulmouzhi's user avatar

2 ways to work around this:

for ‘ you can simply double it in the string, e.g. select ‘I»m happpy’ — will get: I’m happy

For any charactor you are not sure of: in sql server you can get any char’s unicode by select unicode(‘:’) (you keep the number)

So this case you can also select ‘I’+nchar(39)+’m happpy’

Xin's user avatar

The doubling up of the quote should have worked, so it’s peculiar that it didn’t work for you; however, an alternative is using double quote characters, instead of single ones, around the string. I.e.,

insert into my_table values(«hi, my name’s tim.» );

Also another thing to be careful of is whether or not it is really stored as a classic ASCII ‘ (ASCII 27) or Unicode 2019 (which looks similar, but not the same).

This isn’t a big deal on inserts, but it can mean the world on selects and updates.
If it’s the unicode value then escaping the ‘ in a WHERE clause (e.g where blah = ‘Workers»s Comp’) will return like the value you are searching for isn’t there if the ‘ in «Worker’s Comp» is actually the unicode value.

If your client application supports free-key, as well as copy and paste based input, it could be Unicode in some rows, and ASCII in others!

A simple way to confirm this is by doing some kind of open ended query that will bring back the value you are searching for, and then copy and paste that into notepad++ or some other unicode supporting editor.

The differing appearance between the ascii value and the unicode one should be obvious to the eyes, but if you lean towards the anal, it will show up as 27 (ascii) or 92 (unicode) in a hex editor.

Как экранировать кавычки в sql

Строка представляет собой последовательность символов, заключенных либо в одинарные кавычки ( `» ) — апострофы, либо в двойные кавычки ( `»‘ ). При использовании диалекта ANSI SQL допустимы только одинарные кавычки. Например:

Внутри строки некоторые последовательности символов имеют специальное назначение. Каждая из этих последовательностей начинается обратным слешем ( `\’ ), известным как escape-символ или символ перехода. MySQL распознает следующие escape-последовательности:

\0 Символ 0 ( NUL ) в ASCII коде. \’ Символ одиночной кавычки ( `» ). \» Символ двойной кавычки ( `»‘ ). \b Возврат на один символ. \n Символ новой строки (перевода строки). \r Символ перевода каретки. \t Символ табуляции. \z Символ (Control-Z) таблицы ASCII(26). Данный символ можно закодировать, чтобы обойти проблему, заключающуюся в том, что под Windows ASCII(26) означает конец файла (проблемы возникают при использовании ASCII(26) в выражении mysql database < filename) . \\ Символ обратного слеша. \% Символ процентов `%’ . Используется для поиска копий литерала `%’ в контекстах, где выражение `%’ в противном случае интерпретировалось бы как групповой символ (see section 6.3.2.1 Функции сравнения строк). \ `_’ Символ подчеркивания `_’ . Используется для поиска копий литерала `_’ в контекстах, где выражение `_’ в противном случае интерпретировалось бы как групповой символ (see section 6.3.2.1 Функции сравнения строк).

Обратите внимание на то, что при использовании `\%’ или `\_’ в контекстах некоторых строк будут возвращаться значения строк `\%’ и `\_’ , а не `%’ и `_’ .

Существует несколько способов включить кавычки в строку:

  • Одиночная кавычка (апостроф) `» внутри строки, заключенной в кавычки `» , может быть записана как `»’ .
  • Двойная кавычка `»‘ внутри строки, заключенной в двойные кавычки `»‘ , может быть записана как `»»‘ .
  • Можно предварить символ кавычки символом экранирования ( `\’ ).
  • Для символа `» внутри строки, заключенной в двойные кавычки, не требуется специальной обработки; его также не требуется дублировать или предварять обратным слешем. Точно так же не требует специальной обработки двойная кавычка `»‘ внутри строки, заключенной в одиночные кавычки `» .

Ниже показаны возможные варианты применения кавычек и escape-символа на примерах выполнения команды SELECT:

Если необходимо вставить в строку двоичные данные (такие как BLOB ), следующие символы должны быть представлены как escape-последовательности:

NUL ASCII 0. Необходимо представлять в виде `\0′ (обратный слеш и символ ASCII `0′ ). \ ASCII 92, обратный слеш. Представляется как `\\’ . ‘ ASCII 39, единичная кавычка. Представляется как `\» . » ASCII 34, двойная кавычка. Представляется как `\»‘ .

При написании программы на языке C для добавления символов экранирования в команде INSERT можно использовать функцию mysql_real_escape_string() из C API (see section 8.4.2 Обзор функций интерфейса C). При программировании на Perl можно использовать метод quote из пакета DBI для превращения специальных символов в соответствующие escape-последовательности (see section 8.2.2 Интерфейс DBI ).

Не следует забывать, что указанное свойство escape-символа должно использоваться во всех строках, которые могут содержать любые специальные символы, перечисленные выше.

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

Экранирующая строка в MySQL

Как показать все индексы в MySQL или схеме

База данных

Строковые данные необходимо экранировать перед использованием в запросе выбора, чтобы вернуть набор результатов с одинарной кавычкой («), обратной косой чертой (\), ASCII NULL и т. д. Для выполнения этой задачи используется функция MySQL QUOTE(). Он генерирует строковое значение, которое правильно экранирует данные запроса. В этом руководстве описано использование функции QUOTE() для экранирования строки в MySQL.

Синтаксис:

Функция QUOTE() принимает строковое значение в качестве аргумента, который будет экранирован, и возвращает экранированную строку после выполнения запроса. Синтаксис этой функции приведен ниже.

Символы управляющей последовательности

Использование различных символов управляющей последовательности объясняется ниже.

Character Description
\’ Он используется для печати символа одинарной кавычки (‘).
\” Он используется для печати символа двойной кавычки («).
\0 Он используется для печати символа ASCII NULL.
Он используется для печати символа возврата.
\n Он используется для печати символа новой строки.
Он используется для печати символа возврата каретки.
Он используется для печати символа табуляции.
\Z Он используется для печати символов ASCII 26 (Ctrl+Z).
\\ Он используется для печати символа обратной косой черты (\).
\% Он используется для печати символа ‘%’.
\_ Он используется для печати символа «_».
Читать:
Как переформатировать ogg в mp3

Использование функции QUOTE() для строкового значения

В этой части руководства показано использование функции QUOTE() с различными типами символов управляющей последовательности.

Пример 1: Использование функции QUOTE() для печати простой строки

Когда строковое значение печатается без функции QUOTE() с помощью оператора SELECT, строковое значение будет напечатано без кавычек. Запустите следующую инструкцию SELECT с функцией QUOTE(), чтобы напечатать простую строку с одинарной кавычкой.

Следующий вывод появится после выполнения вышеуказанного запроса.

Следующий вывод появится после выполн

Пример 2: Использование функции QUOTE() для печати одинарной кавычки внутри строки

Запустите следующую инструкцию SELECT с функцией QUOTE(), чтобы напечатать строку с одинарными кавычками.

Следующий вывод появится после выполнения вышеуказанного запроса.

Следующий вывод появится пос

Пример 3: Использование функции QUOTE() для печати двойной кавычки внутри строки

Запустите следующую инструкцию SELECT с функцией QUOTE(), чтобы напечатать строку, заключенную в двойные кавычки.

Следующий вывод появится после выполнения вышеуказанного запроса.

Следующий вывод появится по

Пример 4: Использование функции QUOTE() для печати строки с новой строкой

Запустите следующую инструкцию SELECT с функцией QUOTE(), чтобы напечатать строку с новой строкой.

Следующий вывод появится после выполнения вышеуказанного запроса.

Запустите следующую инструкцию SELECT с функцией QUOTE

Пример 5: Использование функции QUOTE() для печати строки с пробелом табуляции

Запустите следующую инструкцию SELECT с функцией QUOTE(), чтобы напечатать строку с символом ’\t’.

Следующий вывод появится после выполнения вышеуказанного запроса. Пространство табуляции было создано между «Hello» и «World» в выходных данных для использования символа «\t».

Пространство табуляции было создано между «Hello»

Пример 6: Использование функции QUOTE() для печати строки с пробелом

Запустите следующую инструкцию SELECT с функцией QUOTE(), чтобы напечатать строку после применения символа ’\b’.

Следующий вывод появится после выполнения вышеуказанного запроса. Символ «x» был удален из основной строки с помощью символа «\b» внутри строки.

Символ «x» был удален из основной строки с помощью

Использование функции QUOTE() для данных таблицы

Вы должны создать таблицу с данными в базе данных MySQL, чтобы проверить с помощью функции QUOTE() данные таблицы. Откройте терминал и подключитесь к серверу MySQL, выполнив следующую команду.

Выполните следующую команду, чтобы создать базу данных с именем test_db.

Выполните следующую команду, чтобы выбрать базу данных.

Выполните следующий запрос, чтобы создать таблицу с именем client и пятью полями.

CREATETABLEclients (
id INTNOT NULL PRIMARY KEY ,
name VARCHAR ( 30 ) NOT NULL ,
email VARCHAR ( 50 ) ,
address TEXT ,
contact_noVARCHAR ( 15 ) ) ;

Выполните следующий запрос INSERT, чтобы вставить 4 записи в таблицу клиентов.

INSERT INTO `clients` ( `id` , `name` , `email` , `address` , `contact _ no` ) VALUES

( ‘4001’ , ‘Laboni Sarkar’ , ‘laboni@gmail.com’ , ’34, Dhanmondi 9/A, Dhaka.’ , ‘01844767234’ ) ,

( ‘4002’ , ‘Tahsin Ahmed’ , ‘tahsin@gmail.com’ , ‘123/1, Jigatola, Dhaka.’ , ‘015993487812’ ) ,

( ‘4003’ , ‘Hasina Pervin’ , ‘hasina@gmail.com’ , ‘280, Shantibagh, Dhaka.’ , ‘01600487812’ ) ,

( ‘4004’ , ‘Mehrab Ali’ , ‘ali@yahoo.com’ , ’78, Cox’s Bazar, Chottogram.’ , ‘01727863459’ ) ;

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

Следующий вывод появится после выполнения вышеуказанного запроса.

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

Пример 1: Использование функции QUOTE() в одном поле таблицы

Когда строковое значение таблицы печатается с использованием запроса SELECT, на выходе будет отображаться строковое значение без каких-либо кавычек. Следующий запрос SELECT напечатает все записи таблицы клиентов и еще один дополнительный столбец QUOTE (электронная почта), заключив поле электронной почты таблицы клиентов в одинарную кавычку.

Следующий вывод появится после выполнения вышеуказанного запроса.

строковое значение таблицы печатается с использованием запроса SELECT

Пример 2: Использование функции QUOTE() в нескольких полях таблицы

Следующий запрос SELECT напечатает исходные значения полей имени и адреса, а также значения в одинарных кавычках полей электронной почты и contact_no таблицы клиентов.

SELECT name as Name , QUOTE ( email ) as Email , address as Address , QUOTE ( contact_no ) as `Contact No`

FROM clients ;

Следующий вывод появится после выполнения вышеуказанного запроса.

Следующий запрос SELECT напечатает исходные значения полей имени

Заключение

Функция QUOTE() используется в запросе SELECT для форматирования строковых данных с использованием различных escape-символов перед печатью. Способы использования функции QUOTE() для простых строковых данных и табличных данных были показаны в этом руководстве, чтобы помочь пользователям MySQL узнать, как экранировать строку в MySQL.

Как обрабатывать и экранировать одинарные и двойные кавычки в инструкции SQL-Update

У меня есть этот образец запроса T-SQL и я пробую его на SQL-Server-2008.

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

Итак, как мне обработать-экранировать как одинарные, так и двойные кавычки в инструкции SQL-Update.

Есть ли ситуация, когда у вас есть конкретный текстовый файл, который вы хотите вручную вставить в клиент SQL? Или вы пишете программу для вставки файла и просто тестируете ее на клиенте, чтобы понять, как написать программу? — Russell Zahniser

Спасибо, Рассел . за попытку разобраться в ситуации. Сценарий такой — есть разные системы, которые присылают нам эту строку из 1000+ символов. Теперь эта строка передается как sql-параметр, и мой sql update-query должен вставить строку this в конкретный столбец. — MukeshAnAlsoRan

В точке, где это строка из 1000+ символов, ПРЕЖДЕ, чем она станет параметром SQL, выполните подстановку. Используйте любой подходящий инструмент, grep из командной строки, C # и т. Д., Просто используйте любую доступную функцию поиска-замены до того, как строка 1000+ char станет SQL. — Carl G

Это не похоже на вопрос SQL. Это скорее вопрос системной интеграции. — Carl G

7 ответы

Вы можете экранировать кавычки с помощью обратной косой черты:

Я уже сказал, что добавление вручную косой черты или одинарной кавычки перед каждой цитатой и тому подобное для двойных кавычек неуместно и исключено, потому что приведенный выше пример является всего лишь образцом, а фактическое значение приложения больше 1000. символы. — МукешАнAlsoRan

Используйте две одинарные кавычки, чтобы избежать их в инструкции sql. Двойные кавычки не должны быть проблемой:

How is my son’s school helping him learn? «Not as good as Stack Overflow would!»

ответ дан 02 мар ’16, в 19:03

Спасибо, Майк. НО я уже сказал, что добавление вручную косой черты или одинарной кавычки перед каждой кавычкой и тому подобное для двойных кавычек непрактично и исключено, потому что приведенный выше пример является всего лишь образцом, а фактическое значение приложения больше, чем 1000 знаков. — МукешАнAlsoRan

Если убежать от персонажей непрактично, то я полагаю, что убежать от них будет довольно сложно. В качестве альтернативы вы можете попробовать определить замещающее значение для «и пакетно заменить их, чтобы вы могли выполнить свой запрос. Конечно, вам также придется повторно заменить их на правильные значения, когда они вам понадобятся для отображения. — Макарк1129

Я, Майк .. Я действительно кое-что подумал . о пакетной замене и тому подобном. НО я считаю, что для этого сценария это было бы излишним, и SQL должен иметь какой-то врожденный элегантный способ справиться с этим, потому что эта проблема существовала бы и 10 лет назад. — МукешАнAlsoRan

Как ни странно, Stack Overflow учит детей хорошо учиться, но не учиться хорошо: | — Romnempire

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

Например, в PHP это будет:

Если вы пытаетесь сделать это, используя только SQL, возможно, ЗАМЕНЯТЬ() это то, что вы ищете.

Похожие статьи