Apa arti pemeriksaan?

139

Apa arti pemeriksaan dalam SQL, dan apa fungsinya?

LOVE_KING
sumber
2
@gbn: Secara kebetulan, pemeriksaan bekerja dengan cara yang sangat mirip di MSSQL dan MySQL.
Piskvor meninggalkan gedung
1
kemungkinan duplikat [MySQL]: Apa itu metode pemeriksaan?
keluar
@ Diskvor: Kecuali beberapa opsi pemeriksaan mySql (misalnya, UTF8) tidak tersedia di MSSQL: msdn.microsoft.com/en-us/library/ms144250.aspx
CB
@CB: Tidak menyangkal itu; kesamaan lebih dalam dari charset yang (tidak) didukung.
Piskvor meninggalkan gedung

Jawaban:

60

Susunan dapat secara sederhana dianggap sebagai urutan.

Dalam bahasa Inggris (dan ini sepupu aneh, Amerika), pemeriksaan mungkin merupakan masalah yang cukup sederhana yang terdiri dari pengurutan berdasarkan kode ASCII.

Setelah Anda masuk ke bahasa Eropa yang aneh dengan semua aksen dan fitur lainnya, susunan berubah. Misalnya, meskipun bentuk aksen yang berbeda dari amungkin ada di titik kode yang berbeda, semuanya mungkin perlu diurutkan seolah-olah merupakan huruf yang sama.

paxdiablo
sumber
4
Aksen yang berbeda biasanya berarti bahwa mereka perlu diurutkan seolah-olah mereka yang berbeda surat - misalnya e, ë, é, ě, dan è mungkin menjadi huruf yang berbeda untuk tujuan pemesanan (tapi mungkin surat yang sama ketika mencari, sialan orang-orang Eropa gila;)).
Piskvor meninggalkan gedung
1
@Piskvor: bukankah koordinat di info Anda menunjuk ke negara tertentu menggunakan alfabet dengan 42huruf, 15di antaranya memiliki diakritik?
Quassnoi
4
@Quassnoi: Ya, dan? Apakah saya menyiratkan di mana saja bahwa saya tidak gila? ; o) (meskipun terima kasih Tuhan untuk Unicode, saya akan sangat marah jika saya masih harus bekerja dengan charset khusus negara)
Piskvor meninggalkan gedung
3
@Piskvor: maaf, maaf, Anda benar-benar gila! :)
Quassnoi
Apakah hanya untuk diurutkan atau juga untuk where st= 'aaa'?
Royi Namir
42

Selain "huruf beraksen diurutkan secara berbeda dari yang tidak beraksen" dalam beberapa bahasa Eropa Barat, Anda harus mempertimbangkan kelompok huruf, yang terkadang juga diurutkan secara berbeda.

Secara tradisional, dalam bahasa Spanyol, "ch" dianggap sebagai huruf dengan sendirinya, sama dengan "ll" (keduanya mewakili fonem tunggal), jadi daftar akan diurutkan seperti ini:

  • caballo.dll
  • cinco
  • coche
  • charco
  • cokelat
  • chueco
  • dado
  • (...)
  • lámpara
  • luego
  • llanta
  • lluvia.dll
  • madera

Perhatikan semua kata yang dimulai dengan satu c pergi bersama, kecuali kata-kata yang dimulai dengan ch yang setelahnya , sama dengan kata-kata awal- ll yang setelah semua kata yang dimulai dengan satu l . Ini adalah urutan yang akan Anda lihat di kamus dan ensiklopedia lama, terkadang bahkan hari ini oleh organisasi yang sangat konservatif.

Royal Academy of the Language mengubah ini untuk mempermudah bahasa Spanyol untuk diakomodasi di dunia komputasi. Namun demikian, ñ masih dianggap sebagai huruf yang berbeda dari n dan setelahnya , dan sebelum o . Jadi ini adalah daftar yang diurutkan dengan benar:

  • Namibia
  • número
  • ñandú
  • ñú
  • obra
  • ojo

Dengan memilih susunan yang benar, Anda menyelesaikan semua ini untuk Anda, secara otomatis :-)

Joe Pineda
sumber
Oke, jadi pemeriksaan cukup berguna untuk pengurutan yang benar, tetapi apakah masih berguna untuk perbandingan? Misalnya, saya ingin 'ñandú' dan 'nandu' ditampilkan secara setara, untuk alasan praktis ... Bisakah mekanisme pemeriksaan membantu saya dalam tugas ini?
CB
@CB: Jika Anda bermaksud seperti memilih semua baris di mana nilai kolom sama dengan 'Aéreo' dan SQL S. mengembalikan baris dengan 'aereo', 'aereó', 'AerEO' dan sejenisnya - ya, menyetel pemeriksaan khusus hanya untuk a kueri bisa melakukan itu. Anda akan mengalami masalah kinerja, jika pemeriksaan ini sangat berbeda dari yang asli database. Dan jika Anda menggunakan tabel sementara, Anda juga harus melacak pemeriksaan tempdb ... Tapi Anda bisa melakukannya.
Joe Pineda
Dalam hal ini, dapatkah Anda menjelaskan sedikit lebih banyak? Khususnya, apakah query langsung "SELECT word FROM test WHERE word LIKE 'nandu'" dapat melakukan itu? Dan pemeriksaan mana yang harus saya gunakan agar berfungsi? (Perhatikan bahwa saya prihatin tentang tanda diakritik, dan bukan hanya aksen ...)
BM
2
@CB lihat bagian 'AI' atau 'AS' dari pemeriksaan (Accent Insensitive dan Accent Sensitive).
Dustin Kendall
14

Aturan yang menjelaskan cara membandingkan dan mengurutkan string: urutan huruf; apakah kasus itu penting, apakah diakritik itu penting, dll.

Misalnya, jika Anda ingin semua huruf berbeda (katakanlah, jika Anda menyimpan nama file di UNIX), Anda menggunakan UTF8_BINpemeriksaan:

SELECT  'A' COLLATE UTF8_BIN = 'a' COLLATE UTF8_BIN

---
0

Jika Anda ingin mengabaikan perbedaan huruf dan diakritik (misalnya, untuk mesin telusur), Anda menggunakan UTF8_GENERAL_CIpemeriksaan:

SELECT  'A' COLLATE UTF8_GENERAL_CI = 'ä' COLLATE UTF8_GENERAL_CI

---
1

Seperti yang Anda lihat, kumpulan ini (aturan perbandingan) menganggap Ahuruf besar dan huruf kecil äadalah huruf yang sama, mengabaikan perbedaan huruf besar dan diakritik.

Quassnoi
sumber
hanya sebagai catatan: Kumpulan karakter utf8mb3 tidak digunakan lagi dan Anda harus berharap itu akan dihapus pada rilis MySQL mendatang. Gunakan utf8mb4 sebagai gantinya. Meskipun utf8 saat ini merupakan alias untuk utf8mb3 , pada titik tertentu utf8 diharapkan menjadi referensi ke utf8mb4. Untuk menghindari ambiguitas tentang arti utf8, pertimbangkan untuk menentukan utf8mb4 secara eksplisit untuk referensi himpunan karakter daripada utf8. dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html
Sonny D
10

Collation menentukan cara Anda mengurutkan dan membandingkan nilai string

Misalnya, ini menjelaskan bagaimana menangani

  • aksen ( äàadll)
  • kasus ( Aa)
  • konteks bahasa:
    • Dalam kolase Prancis, cote < côte < coté < côté.
    • Di default SQL Server Latin1, cote < coté < côte < côté
  • Urutan ASCII (pemeriksaan biner)
gbn
sumber
5

Collation berarti menetapkan beberapa urutan ke karakter dalam Alphabet, katakanlah, ASCII atau Unicode dll.

Misalkan Anda memiliki 3 karakter dalam alfabet Anda - {A, B, C}. Anda dapat menentukan beberapa contoh collation untuk itu dengan menetapkan nilai integral ke karakter

  1. Contoh 1 = {A = 1, B = 2, C = 3}
  2. Contoh 2 = {C = 1, B = 2, A = 3}
  3. Contoh 3 = {B = 1, C = 2, A = 3}

Faktanya, Anda dapat mendefinisikan n! collations pada Alfabet ukuran n. Dengan urutan seperti itu, rutinitas pengurutan yang berbeda seperti jenis string LSD / MSD memanfaatkannya untuk menyortir string.

Murali Mohan
sumber
3

Penyusunan menentukan bagaimana data Anda diurutkan dan dibandingkan. Ini sangat penting terkait dengan internazionalization, misalnya bagaimana Anda mengurutkan kanji jepang?

Jika Anda melakukan pemeriksaan google dan sql server, Anda akan menemukan banyak artikel yang membahasnya!

Dr G
sumber
3

Referensi diambil dari Artikel ini: Collation adalah seperangkat aturan untuk membandingkan karakter dalam himpunan karakter. Itu juga telah mengatur untuk menyortir karakter dan urutan yang tepat dari dua karakter bervariasi dari bahasa ke bahasa. Susunan membandingkan dua string seperti, jika sebuah kata lebih besar dari yang lain, dan mengurutkan sesuai.

Jika Anda menggunakan set Karakter “latin1”, Anda dapat menggunakan Collation “latin1_swedish_ci”.

Anda harus memilih pemeriksaan yang benar karena pemeriksaan yang salah dapat mempengaruhi kinerja database Anda.

Anvesh
sumber
2

http://en.wikipedia.org/wiki/Collation

Collation adalah kumpulan informasi tertulis ke dalam urutan standar. (...) Algoritma pemeriksaan seperti algoritma pemeriksaan Unicode mendefinisikan urutan melalui proses membandingkan dua string karakter yang diberikan dan memutuskan mana yang harus muncul sebelum yang lain.

S. Lott
sumber
1
Artikel ini benar-benar menjelaskan semuanya.
Joe Pineda
3
@Joe Pineda. Mungkin itu benar-benar menjelaskan semuanya, tetapi apakah pembaca ingin mengetahui semuanya? Atau mungkinkah pembaca hanya menginginkan jawaban yang ringkas dan andal yang mencakup elemen dan fungsi collation yang paling mendasar dan umum digunakan sehingga ia dapat membacanya dengan cepat dan melanjutkan mengerjakan tugas, tugas, atau proyek apa pun yang memunculkan pertanyaan tersebut. mulai dengan?
cfwschmidt
2
@TJCrowder Saya menghargai ironi dalam hal ini
1

Pemeriksaan adalah bagaimana SQL server memutuskan bagaimana mengurutkan dan membandingkan teks.

Lihat MSDN .

Oded
sumber