Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं MySql में O'% जैसे वाक्यांश की खोज कैसे कर सकता हूँ?

आप एक शाब्दिक बैकस्लैश इंजेक्ट कर रहे थे। यह काफी है:

SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'

परीक्षण करने के लिए:

SELECT 'O\\\'Brien', 'O\'Brien'

अपडेट करें: पहले से ही एक स्वीकृत उत्तर है इसलिए मैं केवल कुछ स्पष्टीकरण जोड़ूंगा।

सबसे पहले, मैंने इस तथ्य की अनदेखी की थी कि संग्रहीत डेटा दूषित हो गया था। कहने की जरूरत नहीं है, यह बताता है कि क्यों person_sname = 'O\\\'Brien' सच है।

दूसरा, \ MySQL सिंटैक्स में कैरेक्टर के दो उपयोग हैं:

  1. यह वह वर्ण है जिसका उपयोग एस्केप सीक्वेंस :\n , \t ...
  2. यह शाब्दिक % डालने के लिए डिफ़ॉल्ट एस्केप चार है और _ LIKE एक्सप्रेशन में वर्ण :foo LIKE '%abc\%def%'

समस्या यह है कि एक \ . डालने से LIKE एक्सप्रेशन में प्रतीक दोनों व्यवहारों को ट्रिगर करता है इसलिए आपको वास्तव में चार . डालने की आवश्यकता होती है एक पाने के लिए बैकस्लैश :

person_sname like 'O\\\\\'Brien'

... जब तक आप ESCAPE . के साथ दूसरा अर्थ नहीं बदलते खंड:

person_sname like 'O\\\'Brien' escape '|'

बेशक, अगर डेटा दूषित नहीं होता तो आप आसानी से कर सकते हैं:

person_sname = 'O\'Brien'
person_sname like 'O\'Brien'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीएचपी समय प्रारूप

  2. उपयोगकर्ता 'परीक्षण' @ 'आईपी' के लिए प्रवेश निषेध (पासवर्ड का उपयोग करके:हाँ)

  3. MYSQL टाइमस्टैम्प को महीने में बदलें

  4. MySQL में दिए गए कैरेक्टर के लिए ASCII कोड कैसे खोजें

  5. org.hibernate.HibernateException:डेटाबेस ने कोई मूल रूप से उत्पन्न पहचान मान नहीं लौटाया