Shuningdek, u ushbu ustunda har qanday indeksni tiklaydi, shunda ular "%" ni ko'rsatmasdan so'rovlar uchun ishlatilishi mumkin
Sizga har qanday stolni o'zgartirish kerak emas. To'rrirlashdan oldin quyidagi so'rovlardan foydalaning, siz Wilderard belgisini ishlatishni istagan tanlash uchun:
mySQL 5.5-da, beixtiyor ... Shuning uchun, agar vodiyingiz elm yoki elm yoki elm bo'lsa va "% elm%" bo'lsa, u barcha tegishli qiymatlarni ko'rsatadi.
Men MySQLning oldingi versiyalari haqida ayta olmayman.
Masalan, siz Oracle-ga o'tsangiz, ro'yxatdan o'ting, shuning uchun agar siz "% Elm%" ni olsangiz, u faqat shu uchun faqat kerak bo'ladi va yuqori hududlarga e'tibor bermaydi.
G'alati, lekin shunday :)
Bu oddiy iltimosning namunasidir:
* Ni tanlang.
Qayerda Kabi "% %"
Endi pastki funktsiyadan foydalangan holda reestrdan tashqari:
* Ni tanlang.
Qayerda pastki ( ) Pastki kabi ("% %")
Cho'milizni ishlab chiqmoqchi bo'lganimda qidiruv so'rovlariMen har doim taqqoslashdan oldin har bir satrni pastroq ro'yxatga aylantiraman
Siz stolingizni to'g'ri kodlash va xaritalashingiz kerak.
Stol kodlashi haqiqiy ma'lumotlarni kodlashni aks ettirishi kerak. Ma'lumotlar kodlashingiz qanday?
Stol kodlashini ko'rish uchun siz shou-ni boshlashingiz mumkin
Murojaat qilishdan keyin qo'shing. Ushbu usul satrni satrga aylantiradi. Keyin Ral o'rniga ral yordamida foydalaning.
Agar (ruxsatnomacher.tolowcer.tolowcer.tolowcer (). Indeksof ("Ral") \u003d\u003d\u003d -1) (
Xuddi shu narsani amalga oshirish mumkin muntazam ifoda (Dinamik shablonlarni sinashni istaganingizda, ayniqsa foydali):
Agar (!) (Maslahatchi) (// ^ i \u003d RejExp uchun katta bayroqni e'tiborsiz qoldirsangiz)
Facet CTYPE sizga individual belgilarni taqqoslash asosida ro'yxatdan o'tmasdan, ro'yxatdan o'tishni osongina tartibga solish imkonini beradi. Quyidagi versiya eng maqbul emas, lekin hech bo'lmaganda u haqiqat. Bu avvalgidek bir xil printsipdan foydalanadi: liniyalar Leksikaografik_ algoritm bilan taqqoslanadi va individual belgilar yuqori registrga olib keladi. Biroq, bu safar global o'zgaruvchi o'rniga mahalliy kontekstning ob'ekti qo'llaniladi. Aytgancha, ikkalasini ham yuqori ro'yxatga keltirgandan so'ng taqqoslash har doim ham pastki registrga olib keladigan natijada bir xil natija bermaydi. Masalan, frantsuz tillarida eng yuqori reestr belgilari bilan, bu frantsuz mahalliy kontekstida kontekstni yo'qotish odat tusiga kiradi: "E" va "E" belgilari haqida ma'lumot yo'qolishi mumkin "E" eng yuqori ro'yxatning bitta ramziga aylantiriladi. Bunday holda, taqqoslash funktsiyasi bilan taqqoslaganda "E" va "E" belgilari bir xil bo'lib, ular bilan taqqoslaganda, ular boshqacha deb hisoblanadi. Javoblarning qaysi biri to'g'ri? Ehtimol, ikkinchisi, lekin aslida barchasi tilga, milliy urf-odatlarga va dasturning o'ziga xos xususiyatlariga bog'liq.
: Davlat stdi :: Binkin_funktsiya (
const STD :: CTTTE & CT:
lt_char (Const STD :: CTTTE & C): CT (c) ()
bool operatori () (Car x. Char y) konst (
cT.Topper (x)
sTD :: Yashil bo'sh joy;
const STD :: CTTTE & CT;
lt_str_str_l (STD :: Yashile & L \u003d STD :: joylashuvi: klassik ())
Ushbu qaror maqbul emas; U ishlashi mumkin bo'lgandan ko'ra sekinroq ishlaydi. Muammo sof texnik: egper funktsiyasi tsiklda chaqiriladi va C ++ Standard ushbu funktsiyani virtual bo'lishini talab qiladi. Ba'zi optimallar tsikldan virtual funktsiyani namoyish etmoqda, ammo bu tez-tez sodir bo'lmaydi. Tsiklik virtual xususiyatlar keraksiz.
Bunday holda, arzimas echim mavjud emas. Fikr paydo bo'ladi - CTTE Ob'ektining xususiyatlaridan birini ishlating:
Ushbu xususiyat vaqt oralig'ida belgilar ro'yxatini o'zgartiradi. Afsuski, bizning maqsadlarimiz uchun ushbu interfeys mos emas. Ushbu xususiyatdan ikkita qatorni taqqoslash uchun foydalanish uchun siz ikkala satrni ham tampon ichida nusxalashingiz va o'z tarkiblarini yuqori registrga aylantirishingiz kerak. Ammo bu tamponlar qayerdan keladi? Ular atamali massivlar bo'lishi mumkin emas (nima bo'lish kerakligi noma'lum maksimal hajmi), va dinamik massivlar qimmat xotirani taqsimlashni talab qiladi.
Muqobil echim har bir belgini keshlash bilan bir marta konversiya qilishdan iborat. Bunday yechim umumbashariy, xususan, 32 bit UCS-4 belgidan foydalanganda, bu mutlaqo ishlamayotganda. Boshqa tomondan, char turi (ko'p sonli tizimlarda 8 bitli), taqqoslash funktsiyasi ob'ektida qo'shimcha ma'lumotni saqlash g'oyasi juda haqiqiy ko'rinadi.
sporativ lt_str_2:
davlat stdi :: Binkin_funktsiya (
konstan char * tab;
lt_char (Conce char * t): tab (t) ()
bool Operator () (Car x, char Y) konst (
qaytish yorlig'i.
char yorlig'i;
lt_str_2 (Const STD :: Yashile & L \u003d STD:. Boshqa manzil: klassik ()) (Klassik ()) (
Ko'rinib turibdiki, lt_str_1 va lt_str_2 o'rtasidagi farq unchalik katta emas. Birinchi holatda CTYPE faylidan foydalangan holda belgilarning taqqoslash funktsiyasi to'g'ridan-to'g'ri ishlatiladi va ikkinchi holatda, taqqoslash funktsiyasining yuqori registrga kiritilgan. Ikkinchi echim, agar siz Ob'ekt ob'ekti lt_str_2 ni yaratsangiz, avvalgisidan foydalansangiz, undan bir nechta qisqa qatorlarni taqqoslang va yo'q qiling. Boshqa tomondan, ko'p miqdordagi ma'lumotlarni qayta ishlashda, u juda tezroq lt_str_1 ishlaydi. Sinovlarimda ustunlik ikki baravar ko'p edi: LT_str_l-dan foydalanganda, so'zlarni saralash 23,791 raqami va LT_str_2-dan foydalanganda, u atigi 0,4 soniyadan foydalanganda.
Xo'sh, biz nimani bilamiz?
Sytaj reytingi registrini hisobga olgan holda satr klassi mavhumning noto'g'ri darajasida amalga oshiriladi. C ++ kutubxonasi standartlashtirilgan algoritmlar parametrlar mavjud va bu haqiqatdan foydalanish kerak.
Leksikografik chiziqlar taqqoslash individual belgilar bilan taqqoslanadi. Agar sizda ishni ro'yxatdan o'tkazmasdan taqqoslash funktsiyalari bo'lsa, vazifa aslida hal qilinadi va ushbu ob'ektni vektorli va doimiy jadvallar yoki oddiy liniyalar kabi o'zgartirish uchun ishlatilishi mumkin.
Ro'yxatdan o'tishsiz qatorlar ro'yxatdan o'tmasdan yo'riqnomani taqqoslash vazifasi birinchi qarashda ko'rinadi. Bu faqat ma'lum bir mahalliy kontekstda mantiqiy ahamiyatga ega, shuning uchun taqqoslash funktsiyasi ob'ektida joriy mahalliy kontekst haqida ma'lumot bo'lishi kerak. Agar taqqoslash tezlik bilan optimallashtirilsa, Funktsiya ob'ekti Quduq operatsiyalarini jabrlanmaslik uchun bir nechta qo'ng'iroqni oldini oling.