Как мога да извърша utf8 търсене с чувствителност към ударение, но без значение за малки и главни букви в mysql? Utf8_bin е чувствителен към главни и малки букви, а utf8_general_ci не е чувствителен към акцентите.
възможно ли е да има чувствително към акцента и нечувствително към главни и малки букви utf8 сортиране в mysql?
Отговори (3)
Изглежда, че няма такъв, защото чувствителността към малки и главни букви е трудно се прави в Unicode.
Има utf8_general_cs
съпоставяне, но изглежда, че е експериментално и според този доклад за грешка, не прави това, което се очаква, когато използва LIKE.
Ако вашите данни се състоят само от западни умлаути (т.е. умлаути, които са включени в ISO-8859-1), може да сте в състояние да съпоставите вашата операция за търсене до latin1_german2_ci
или да създадете отделна колона за търсене с нея (това конкретно съпоставяне е чувствително към акцента според към тази страница latin1_general_ci
може да е като добре, не знам и не мога да тествам в момента).
Ако искате да различавате "café" от "cafe", можете да използвате:
Select word from table_words WHERE Hex(word) LIKE Hex("café");
По този начин ще върне „кафене“.
В противен случай, ако използвате:
Select word from table_words WHERE Hex(word) LIKE Hex("cafe");
ще се върне кафене. Използвам съпоставката latin1_german2_ci.
Можете да използвате "hex
", за да направите търсенето чувствително към акцента. След това просто добавете lcase, за да го направите отново без значение. Така че това ще даде:
SELECT name FROM people WHERE HEX(LCASE(name)) = HEX(LCASE("René"))
Вие наистина изхвърляте всичките си индекси от прозореца по този начин. Ако искате да избегнете необходимостта да правите пълно сканиране на таблица и имате индекс на "име", също потърсете същото нещо без шестнадесетичен и lcase:
SELECT name FROM people WHERE name = "René" and HEX(LCASE(name)) = HEX(LCASE("René"))
По този начин индексът на "name
" ще се използва за намиране например само на редовете "René
" и "Rene" и след това сравнението с "hex
" трябва да се направи само на тези два реда, вместо на цялата таблица.