Używanie odwrotnego ukośnika do ucieczki pojedynczych cudzysłowów jest powszechnie stosowaną techniką, aby zapewnić, że pojedyncze cudzysłowy nie będą kolidować z obsługą pełnego ciągu znaków przez MySQL.
Pojedyncze cudzysłowy są używane do otaczania ciągu, więc pojedynczy cudzysłów w samym ciągu może spowodować spustoszenie, jeśli nie zostanie prawidłowo zmieniony. Po prostu wstawienie odwrotnego ukośnika bezpośrednio przed cudzysłowem zapewnia, że MySQL nie zakończy przedwcześnie ciągu.
Jednak mogą zaistnieć sytuacje, w których chcesz, aby ukośnik odwrotny pozostał. Na przykład możesz chcieć użyć ciągu w wyrażeniu SQL i dlatego najpierw chcesz, aby był on odpowiednio zmieniony.
W tym miejscu QUOTE()
funkcja wchodzi.
MySQL QUOTE()
funkcja cytuje ciąg w celu uzyskania wyniku, który może być użyty jako wartość danych ze znakami zmiany znaczenia w instrukcji SQL. Ciąg jest zwracany ujęty w pojedyncze cudzysłowy i z każdym wystąpieniem ukośnika odwrotnego (\
), pojedynczy cudzysłów ('
), ASCII NUL
i Control+Z poprzedzone odwrotnym ukośnikiem.
Składnia funkcji QUOTE()
Oto jak działa składnia:
QUOTE(str)
Gdzie str
jest (już) łańcuchem ze znakami ucieczki.
Przykład
Przykład prawdopodobnie wyjaśnia to lepiej niż moje wyjaśnienie:
SELECT QUOTE('Don\'t!') AS Result;
Wynik:
+-----------+ | Result | +-----------+ | 'Don\'t!' | +-----------+
Na pierwszy rzut oka możesz pomyśleć „ale nic się nie stało – wynik jest dokładnie taki sam jak argument”. Jednak właśnie dlatego ta funkcja jest przydatna. Gdybyśmy nie użyli funkcji QUOTE()
funkcja, oto co by się stało:
SELECT 'Don\'t!' AS Result;
Wynik:
+--------+ | Result | +--------+ | Don't! | +--------+
Używając QUOTE()
funkcji, zachowujemy pojedyncze cudzysłowy i odwrotny ukośnik.
Oczywiście w wielu przypadkach jest to dokładnie to, czego chcesz. W wielu przypadkach ukośnik odwrotny i otaczające go cudzysłowy powinny zostać usuniętym. Ale mogą wystąpić sytuacje, w których chcesz dokładnie to, co QUOTE()
funkcja robi za Ciebie.
Alternatywa
QUOTE()
funkcja pozwala uniknąć robienia czegoś takiego:
SELECT '''Don\\\'t!''' AS Result;
Wynik:
+-----------+ | Result | +-----------+ | 'Don\'t!' | +-----------+
Dzięki temu nie musimy używać trzech pojedynczych cudzysłowów dla każdego cudzysłowu i trzech odwrotnych ukośników dla każdego odwrotnego ukośnika.