यह LOCATE()
पर बग 70767 की वजह से है और INSTR()
, जिसे सत्यापित कर दिया गया है।
हालांकि INSTR()
प्रलेखन में कहा गया है कि इसका उपयोग मल्टी-बाइट स्ट्रिंग्स के लिए किया जा सकता है, यह काम नहीं करता है, जैसा कि आप ध्यान दें, utf8_general_ci
जैसे कोलाज के साथ , जो केस और एक्सेंट असंवेदनशील होना चाहिए
बग रिपोर्ट में कहा गया है कि यद्यपि MySQL इसे सही ढंग से करता है, यह केवल तभी करता है जब बाइट्स . की संख्या भी समान है:
रिपोर्ट उदाहरण को विकृत करने के लिए, यदि आप निम्न तालिका बनाते हैं:
create table t ( needle varchar(10), haystack varchar(10)
) COLLATE=utf8_general_ci;
insert into t values ("A", "a"), ("A", "XaX");
insert into t values ("A", "á"), ("A", "XáX");
insert into t values ("Á", "a"), ("Á", "XaX");
insert into t values ("Å", "á"), ("Å", "XáX");
फिर इस क्वेरी को चलाएँ, आप उसी व्यवहार को प्रदर्शित होते हुए देख सकते हैं:
select needle
, haystack
, needle=haystack as `=`
, haystack LIKE CONCAT('%',needle,'%') as `like`
, instr(needle, haystack) as `instr`
from t;