Data kolom Anda disimpan menggunakan set karakter. Dalam hal ini sepertinya utf8.
Saat Anda mengoperasikan kolom tersebut (melakukan, misalnya, perbandingan kesetaraan atau pemesanan), MySQL menggunakan collation. Setiap kolom memiliki susunan default, yang diwarisi dari susunan default tabel.
Indeks memiliki susunan default kolom yang dimasukkan ke dalamnya sehingga dapat berfungsi secara efisien.
Anda dapat melakukan perbandingan kesetaraan yang memenuhi syarat dengan pemeriksaan. Misalnya, dalam JOIN
Anda dapat menentukan
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
atau mungkin
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
Itu akan menghilangkan campuran koleksi ilegal Anda tanpa mengharuskan Anda mengubah tabel Anda. Ini dapat membantu Anda menghindari perubahan basis data yang Anda tanyakan. Namun berhati-hatilah, menggunakan COLLATE
qualifier dapat mengalahkan penggunaan index. Jika Anda memiliki tabel besar dan Anda mengandalkan indeks untuk kinerja, ini mungkin tidak membantu.
Jadi, apa yang akan terjadi jika Anda mengubah tabel untuk mengubah susunan default?
- Data Anda tidak akan berubah (kecuali jika Anda juga mengubah set karakter). Itu bagus.
- Indeks apa pun yang melibatkan kolom dengan susunan akan dibuat ulang.
- Perbandingan dan urutan Anda dapat berubah. Saya tidak tahu bahasa Turki, jadi saya tidak bisa memberi tahu Anda apa yang mungkin rusak. Namun, misalnya, dalam bahasa Spanyol huruf N dan Ñ tidak sama. T datang sebelum Ñ dalam susunan Spanyol, tetapi dalam susunan umum mereka diperlakukan sama. Mungkin ada beberapa aspek alfabet Turki yang berfungsi sama, jadi
ORDER BY
hasilnya akan salah.
Namun, Anda dapat memperbaikinya dengan menentukan COLLATE
pengubah di ORDER BY
klausa.
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)