No, to je pouze dvojité escapování, ale ano, funguje to a zde je důvod:v MySQL je při použití LIKE
zahrnuta druhá vrstva escapování operátor.
services LIKE '%L\\\\u00e4mm\\\\u00f6n%'
analýza tohoto řetězcového literálu MySQL vám poskytne srovnání s dotazem LIKE %L\\u00e4mm\\u00f6n%
. Protože MySQL zachází s \
v dotazu LIKE jako escape, který bude ve skutečnosti odpovídat doslovnému řetězci obsahujícímu L\u00e4mm\u00f6n
.
Důvodem je to, že můžete porovnat řetězce s výrazem dotazu, který obsahuje doslovný %
nebo _
charakter. Například pokud chci ve sloupci vyhledat doslovný řetězec 100%
, mohu to porovnat s 100\%
(zapsáno v dotazu jako '100\\%'
) a ujistěte se, že dostanu opravdu sto procent, a ne žádný řetězec začínající stovkou.
Je nešťastné, že MySQL používá zpětné lomítko pro escapování LIKE dotazu i escapování řetězcového doslovného escapování, zejména vzhledem k tomu, že pravděpodobně píšete v uzavřeném programovacím jazyce, který je také používá, což končí skutečným trojitým kódováním, které vypadá jako "services LIKE '%L\\\\\\\\u00e4mm\\\\\\\\u00f6n%'"
- Argh!
Je to dvojnásob nešťastné vzhledem k tomu, že toto chování není v souladu s ANSI SQL a nebude fungovat v žádné jiné databázi. ANSI SQL říká, že ve výchozím nastavení není v dotazech LIKE žádný znak escape, takže pokud chcete najít doslovný %
nebo _
musíte se přihlásit nominováním své vlastní únikové postavy, např.:
something LIKE '100=%' ESCAPE '='
Pro kompatibilitu mezi databázemi je nejlepší vždy použít LIKE
...ESCAPE
formulář a vyberte si něco jiného než to hrozné zpětné lomítko! (Pomineme-li – zpětná lomítka MySQL pro escapování řetězcového literálu SQL také nejsou v souladu s ANSI! Ale toto špatné chování můžete vypnout nastavením NO_BACKSLASH_ESCAPES sql_mode.)
Pravděpodobně lepší nápad by bylo přerušit services
do druhé tabulky spíše než je stlačit do jednoho sloupce řetězce - tzn. vložte schéma do prvního normálního formuláře. Pak byste mohli získat jednoduché vyhledávání jednotlivých hodnot místo toho, abyste museli provádět pomalé porovnávání podřetězců při úplném skenování tabulky.