De gegevens van uw kolommen worden opgeslagen met behulp van een tekenset. In dit geval lijkt het utf8 te zijn.
Wanneer u op die kolommen werkt (bijvoorbeeld gelijkheidsvergelijkingen of bestellen), gebruikt MySQL een sortering. Elke kolom heeft een standaardsortering, die wordt geërfd van de standaardsortering van de tabel.
In indexen is de standaardsortering van de kolom ingebakken, zodat ze efficiënt kunnen functioneren.
U kunt een gelijkheidsvergelijking maken die wordt gekwalificeerd door sortering. Bijvoorbeeld in een JOIN
u kunt specificeren
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
of misschien
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
Dat zou uw illegale mix van sorteringen moeten elimineren zonder dat u uw tabel hoeft te wijzigen. Dit kan u helpen de databasewijziging waar u om vraagt, te vermijden. Maar pas op, met behulp van de COLLATE
kwalificatie kan het gebruik van een index verslaan. Als je een grote tabel hebt en je vertrouwt op indexen voor prestaties, kan dit nutteloos zijn.
Wat gebeurt er als u uw tabellen wijzigt om de standaardsortering te wijzigen?
- Uw gegevens veranderen niet (tenzij u ook de tekenset wijzigt). Dat is goed.
- Alle indexen met kolommen met sorteringen worden opnieuw gegenereerd.
- Uw vergelijkingen en bestellingen kunnen veranderen. Ik ken geen Turks, dus ik kan je niet vertellen wat er zou kunnen breken. Maar bijvoorbeeld in het Spaans de letters N en Ñ zijn niet hetzelfde. N komt voor Ñ in een Spaanse collatie, maar in de algemene collatie worden ze als hetzelfde behandeld. Er kan een aspect van het Turkse alfabet zijn dat hetzelfde werkt, dus uw
ORDER BY
resultaten zullen onjuist zijn.
Maar u kunt dat oplossen door een COLLATE
. op te geven modifier in uw ORDER BY
clausule.
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)