Yah, itu hanya pelolosan ganda, tapi ya itu berhasil dan inilah alasannya:di MySQL, ada pelolosan lapisan kedua yang terlibat saat Anda menggunakan LIKE
operator.
services LIKE '%L\\\\u00e4mm\\\\u00f6n%'
parsing bahwa literal string MySQL memberi Anda perbandingan dengan kueri LIKE %L\\u00e4mm\\u00f6n%
. Karena MySQL memperlakukan \
dalam kueri LIKE sebagai pelarian, yang sebenarnya akan cocok dengan string literal yang berisi L\u00e4mm\u00f6n
.
Alasannya adalah agar Anda dapat mencocokkan string dengan ekspresi kueri yang berisi %
literal atau _
karakter. Misalnya jika saya ingin mencari kolom untuk string literal 100%
, saya dapat mencocokkannya dengan 100\%
(ditulis dalam kueri sebagai '100\\%'
) dan pastikan saya benar-benar mendapatkan seratus persen dan bukan sembarang string yang dimulai dengan seratus.
Sangat disayangkan bahwa MySQL menggunakan garis miring terbalik untuk pelolosan kueri LIKE dan pelolosan string literalnya, terutama mengingat bahwa Anda mungkin menulis dalam bahasa pemrograman terlampir yang juga menggunakannya, berakhir dengan penyandian rangkap tiga yang sebenarnya, yang terlihat seperti "services LIKE '%L\\\\\\\\u00e4mm\\\\\\\\u00f6n%'"
- argh!
Sangat disayangkan mengingat bahwa perilaku ini tidak sesuai dengan ANSI SQL, dan tidak akan berfungsi di database lain mana pun. ANSI SQL mengatakan bahwa tidak ada karakter escape dalam kueri LIKE secara default, jadi jika Anda ingin mencocokkan %
literal atau _
Anda harus ikut serta dengan menominasikan karakter pelarian Anda sendiri, mis.:
something LIKE '100=%' ESCAPE '='
Untuk kompatibilitas lintas-basis data, yang terbaik adalah selalu menggunakan LIKE
...ESCAPE
bentuk, dan pilih sesuatu selain garis miring terbalik yang mengerikan! (Selain itu - garis miring terbalik MySQL untuk pelolosan literal string SQL juga tidak sesuai dengan ANSI! Tetapi Anda dapat menonaktifkan perilaku tersebut dengan pengaturan sql_mode NO_BACKSLASH_ESCAPES.)
Mungkin ide yang lebih baik adalah memecahkan services
keluar ke tabel kedua daripada meremasnya menjadi satu kolom string - yaitu. letakkan skema Anda dalam Bentuk Normal Pertama. Kemudian Anda bisa mendapatkan pencarian nilai individual yang sederhana daripada harus melakukan pencocokan substring pemindaian tabel penuh yang lambat.