Apa perbedaan antara susunan dan rangkaian karakter?

24

Saya punya pertanyaan umum tentang basis data. Kami biasanya menggunakan istilah collation dengan database. Saya ingin tahu apa bedanya dengan set karakter. Saya kira collation adalah himpunan bagian dari set karakter. Jika benar, apa tujuan multi-susun di bawah set karakter.

Shameer
sumber
Lihat juga stackoverflow.com/questions/341273/...
Sanghyun Lee

Jawaban:

27

Kumpulan karakter adalah daftar simbol. Jika Anda membandingkan ASCII dengan latin1 , dengan latin1 Anda akan dapat menulis semua kata Amerika karena latin1 berisi semua karakter ASCII , yang cukup untuk menulis kata bahasa Inggris apa pun. Sebaliknya, dengan ASCII Anda tidak akan dapat menulis semua kata dari bahasa spesifik Eropa Barat, karena misalnya karakter seperti 'À', '' ',' õ ',' Ñ 'tidak ada.

Kolasi adalah tentang perbandingan antar karakter. Ini mendefinisikan seperangkat aturan untuk membandingkan karakter dari set karakter.

Di MySQL, koleksi sering terkait dengan satu bahasa (misalnya 'latin1_swedish_ci', 'latin1_german1_ci', dll.). Saat Anda memesan kueri pemilihan, kata yang dimulai dengan 'ö' akan ditempatkan di antara dua kata yang dimulai dengan 'o' dan 'p' dalam beberapa bahasa (dengan beberapa susunan). Tetapi dengan susunan lain, karakter ini dapat ditempatkan sepenuhnya di akhir, yang membuat seleksi yang dihasilkan berbeda.

uloBasEI
sumber
Terima kasih, Sudah hampir jelas sekarang. Jadi saya pikir memilih susunan adalah masalah serius saat merencanakan situs multibahasa? Misalnya jika collation adalah 'latin1_swedish_ci', saya tidak akan mendapatkan hasil yang diharapkan saat berhadapan dengan bahasa unicode.?
Shameer
1
Saya akan menyarankan Anda untuk pergi untuk unicode atau Anda akhirnya akan mengalami masalah di beberapa titik (bahasa asiatik untuk contoh). Susunan akan tergantung pada bahasa pengguna. Ini adalah sesuatu yang harus Anda berhati-hati jika Anda ingin memiliki alat multibahasa.
deadalnix
6

Seperti jawaban sebelumnya, himpunan karakter adalah himpunan karakter (huruf, angka, ideogram, dll.) Yang ditugaskan untuk suatu angka; untuk dapat melihatnya, Anda harus memiliki font ("gambar" kecil yang kita baca). Mereka penting menggunakan LatinX, karena untuk setiap X, angka (byte) yang sama dapat merujuk ke karakter yang berbeda.

Saat ini lebih penting untuk memilih pengkodean: standarnya adalah UTF-8, representasi Unicode paling sukses (kompatibel dengan ASCII tetapi sangat fleksibel untuk memasukkan semua bahasa, bahkan Cina dan Jepang) dan standar W3C. Dengan kata lain, itu termasuk semua set karakter.

Collation: ini adalah kata mode lama, berasal dari bahasa Latin. Artinya: bandingkan salinan (manuskrip) dengan yang asli untuk menemukan perbedaan (kesalahan atau perubahan). Itu sangat berguna di masa lalu, tetapi sekarang hampir kuno karena dokumen dan buku kami ditulis menggunakan komputer dan salinannya selalu identik dengan aslinya. Contoh: dalam bahasa Italia (berasal dari bahasa latin) ada kata kerja "collazionare", tetapi dalam kamus dan tidak ada yang menggunakannya.

Jadi, susunan mendefinisikan perilaku operator pembanding: =,>, <, <=,> = ...

Tentu saja para operator itu digunakan untuk memutuskan apakah dua string adalah sama, atau jika sebuah kata "lebih besar" dari yang lain, sangat penting jika kita ingin mengurutkan. Huruf-hurufnya tidak dalam urutan yang sama untuk setiap bahasa, jadi sebuah kata bisa lebih besar dari yang lain menggunakan susunan, tetapi tidak menggunakan yang lain. Lihat [1] untuk contoh praktis.

  • koleksi "bin" adalah yang paling ketat: SELECT "b" = "B" => FALSE

  • koleksi "ci" tidak peka huruf besar-kecil: SELECT "b" = "B" => TRUE

  • "umum" cenderung mengabaikan beberapa perbedaan: PILIH "a" = "à" => BENAR

  • lainnya khusus untuk satu atau lebih bahasa. Contoh "swedia" (Saya tidak tahu mengapa swedia sering default)

Saya masih mencari situs web di mana perilaku setiap pemeriksaan dijelaskan secara rinci ... contoh-contoh tersebut adalah karena pengalaman saya.

[1] http://www.olcot.co.uk/sql-blogs/revised-difference-between-collation-sql_latin1_general_cp1_ci_as-and-latin1_general_ci_as

Francesco
sumber
1
Swedia adalah default di beberapa bit dari MySQL. Warisannya sejak MySQL diciptakan oleh tim kecil di Swedia pada '95
Chris Wood