Данните на вашите колони се съхраняват с помощта на набор от знаци. В този случай изглежда, че е utf8.
Когато работите с тези колони (правейки например сравнения за равенство или подреждане), MySQL използва съпоставка. Всяка колона има сортиране по подразбиране, което наследява от сортирането по подразбиране на таблицата.
Индексите имат съпоставяне по подразбиране на колоната, вградено в тях, така че да могат да функционират ефективно.
Можете да направите сравнение на равенство, което е квалифицирано чрез съпоставка. Например в JOIN
можете да посочите
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
или може би
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
Това трябва да елиминира вашата незаконна комбинация от сравнявания, без да се налага да променяте таблицата си. Това може да ви помогне да избегнете промяната в базата данни, за която питате. Но внимавайте, като използвате COLLATE
квалификатор може да отмени използването на индекс. Ако имате голяма таблица и разчитате на индекси за ефективност, това може да е безполезно.
И така, какво ще се случи, ако промените вашите таблици, за да промените сортирането по подразбиране?
- Вашите данни няма да се променят (освен ако не промените и набора от знаци). Това е добре.
- Всички индекси, включващи колони със съпоставки, ще бъдат генерирани отново.
- Вашите сравнения и подреждане може да се променят. Не знам турски и не мога да ти кажа какво може да се счупи. Но, например, на испански буквитеN и С не са еднакви. Н идва преди Ñ в испанско съпоставяне, но в общото съпоставяне те се третират като едно и също. Може да има някои аспекти на турската азбука, които работят по същия начин, така че вашият
ORDER BY
резултатите ще бъдат неправилни.
Но можете да поправите това, като посочите COLLATE
модификатор във вашия ORDER BY
клауза.
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)