Dane Twoich kolumn są przechowywane przy użyciu zestawu znaków. W tym przypadku wydaje się, że jest to utf8.
Kiedy operujesz na tych kolumnach (wykonując na przykład porównania równości lub porządkowanie), MySQL stosuje sortowanie. Każda kolumna ma domyślne sortowanie, które dziedziczy z domyślnego sortowania tabeli.
Indeksy mają wbudowane domyślne sortowanie kolumny, dzięki czemu mogą działać wydajnie.
Możesz wykonać porównanie równości, które jest kwalifikowane przez sortowanie. Na przykład w JOIN
możesz określić
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
a może
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
To powinno wyeliminować nielegalną mieszankę zestawień bez konieczności zmiany tabeli. Może to pomóc w uniknięciu zmiany bazy danych, o którą pytasz. Ale uważaj, używając COLLATE
kwalifikator może uniemożliwić użycie indeksu. Jeśli masz dużą tabelę i polegasz na indeksach, aby uzyskać wydajność, może to być nieprzydatne.
Co się stanie, jeśli zmienisz tabele, aby zmienić domyślne sortowanie?
- Twoje dane nie ulegną zmianie (chyba że zmienisz również zestaw znaków). To dobrze.
- Wszelkie indeksy obejmujące kolumny z sortowaniem zostaną odtworzone.
- Twoje porównania i zamówienia mogą ulec zmianie. Nie znam tureckiego, więc nie mogę powiedzieć, co może się zepsuć. Ale na przykład w języku hiszpańskim litery N i Ñ nie są takie same. N pojawia się przed Ñ w zestawieniu hiszpańskim, ale w zestawieniu ogólnym są traktowane tak samo. Może istnieć jakiś aspekt alfabetu tureckiego, który działa tak samo, więc Twoje
ORDER BY
wyniki będą nieprawidłowe.
Ale możesz to naprawić, określając COLLATE
modyfikator w Twoim ORDER BY
klauzula.
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)