Pemeriksaan mana yang harus saya gunakan di mysql?

Himpunan karakter adalah sekumpulan simbol dan pengkodean. Dan collation adalah sekumpulan aturan untuk membandingkan dan menyortir karakter dalam kumpulan karakter. Rangkaian karakter harus berisi setidaknya 1 susunan default. Untuk MySQL 8. 0 kumpulan karakter dan susunan server MySQL default adalah utf8mb4 dan utf8mb4_0900_ai_ci, tetapi kita dapat menentukan kumpulan karakter di tingkat server, basis data, tabel, kolom, dan string literal

Pemeriksaan mana yang harus saya gunakan di mysql?
Semua rangkaian karakter
Pemeriksaan mana yang harus saya gunakan di mysql?
Semua susunan untuk rangkaian karakter.

Sekarang sedikit menyelam lebih dalam

Mysql menggunakan fungsi weight_string untuk menyortir dan membandingkan string. Fungsi ini mengembalikan string bobot untuk string input. Ia memiliki sifat-sifat ini

  • Jika = , maka str1 = str2 (str1 dan str2 dianggap sama)
  • Jika < , maka str1 < str2 (str1 mengurutkan sebelum str2)

Oke, jadi kita tahu bahwa fungsi weight_string_ digunakan untuk membandingkan, tapi apa peran collation dan charset?

Pemeriksaan mana yang harus saya gunakan di mysql?
Dengan latin1_general_cs

Dalam contoh di atas, kami telah mengambil token weight_string5 dan weight_string6 dan menerapkan charset latin1 dan collation latin1_general_cs. Kita dapat melihat, bahwa weight_string_7 berbeda dan antara weight_string5 dan weight_string6, weight_string5 lebih kecil. Mari kita lihat contoh lain dengan susunan yang berbeda

Pemeriksaan mana yang harus saya gunakan di mysql?
Dengan latin1_general_ci

Dalam contoh di atas, kami telah menggunakan susunan latin1_general_ci, dan kami dapat melihat bahwa weight_string5 dan weight_string6 memiliki bobot yang sama dan oleh karena itu keduanya sama

Mari buat 2 tabel, dengan susunan  latin1_general_ci dan latin1_general_cs. Kami telah memasukkan weight_string5 dan weight_string6 di kedua tabel

Pemeriksaan mana yang harus saya gunakan di mysql?

Kita sudah tahu bahwa dalam kasus latin1_general_ci, weight_string6 dan weight_string5 memiliki bobot yang sama, mari kita lihat apa yang terjadi jika kita hanya meminta weight_string6. Yah, tidak ada tanda untuk menebak dengan benar. Ini akan mendapatkan kedua baris

Pemeriksaan mana yang harus saya gunakan di mysql?

Dan, untuk latin1_general_cs, itu hanya akan mengambil baris dengan bobot yang sama persis. Jika kami mengambil urutan baris dengan str_field, weight_string5 akan menjadi sebelum weight_string6

Pemeriksaan mana yang harus saya gunakan di mysql?

WEIGHT_STRING(str20 akhiran dalam collation names artinya case-sensitive atau case-insensitive, jika Anda ingat susunan default MySql 8 adalah utf8mb4_0900_ai_ci yang artinya case-insensitive dan aksen-insensitive

SuffixArtiWEIGHT_STRING(str21Accent-insensitiveWEIGHT_STRING(str22Accent-sensitiveWEIGHT_STRING(str23Case-insensitiveWEIGHT_STRING(str24Case-sensitiveWEIGHT_STRING(str25Kana-sensitiveWEIGHT_STRING(str26Binary

Collation dan charset yang tidak kompatibel

Dalam semua contoh di atas, kami telah membandingkan string dalam rangkaian karakter dan susunan yang sama, tetapi apa yang terjadi jika kumpulan karakter/kumpulan tidak kompatibel? . Sebagai seorang pemula, kita semua telah bergumul dengan kesalahan ini dan tidak tahu apa yang menyebabkannya, tetapi sekarang kita tahu. WEIGHT_STRING(str27 error. As a beginner, we all have struggled with this error and had no clue, what caused this, but now we know.

Pemeriksaan mana yang harus saya gunakan di mysql?
Campuran koleksi ilegal
KESALAHAN 1267 (HY000). Campuran pemeriksaan ilegal (latin1_general_ci,IMPLICIT) dan (latin1_general_cs,IMPLICIT) untuk operasi '='

Untuk memperbaiki kesalahan ini, kita harus membuat kolom kompatibel satu sama lain, yang dapat kita lakukan dengan membuat susunan yang sama di seluruh kolom

Hanya meletakkannya di luar sana

Saat menulis blog ini, saya menghadapi sesuatu yang aneh, kita sudah tahu itu

  • STRING_BERAT(str28 = 41
  • WEIGHT_STRING(str29 = 42

Tetapi ketika menugaskannya ke variabel str10 dan str11 masing-masing, dan memeriksa nilainya, saya mendapatkan nilai bobot yang sama?

Pemeriksaan mana yang harus saya gunakan di mysql?

Yah, ini bisa jadi karena, pada tingkat sistem di database saya, susunan default diatur ke str12 dan dengan susunan itu, str13 dan str14 adalah sama

Pemeriksaan mana yang harus saya gunakan di mysql?

Memperbarui. Mengubah charset dan collation tingkat sistem belum menyelesaikan masalah btw. ¯\_(ツ)_/¯

Kesimpulan

Himpunan karakter adalah sekumpulan simbol dan pengkodean. Dan collation adalah sekumpulan aturan untuk membandingkan dan menyortir karakter dalam kumpulan karakter

  • Collation dan charset menentukan bobot string, yang digunakan untuk membandingkan dan menyortir
  • Untuk MySQL 8. 0 kumpulan karakter dan susunan server MySQL default adalah utf8mb4 dan utf8mb4_0900_ai_ci. Di hampir semua kasus, Anda harus selalu menggunakan str16 collation
  • Mix of collations error yang ilegal dapat diperbaiki dengan membuat collations kompatibel satu sama lain

Sumber daya

MySQL. MySQL8. 0 Pedoman Referensi. 10 Set Karakter, Kolasi, Unicode

Manual Referensi MySQL

Lokalisasi MySQL dan Penggunaan Internasional Set Karakter Digunakan untuk Data dan Penyortiran Secara default, MySQL menggunakan set karakter ISO-8859-1 (Latin1) dengan penyortiran menurut bahasa Swedia/Finlandia. Ini adalah .. - Seleksi dari Manual Referensi MySQL [Buku]

Apa susunan terbaik untuk digunakan untuk MySQL?

Jika Anda menggunakan MySQL 8. 0, rangkaian karakter default adalah utf8mb4. Jika Anda memilih untuk menggunakan UTF-8 sebagai collation Anda, selalu gunakan utf8mb4 (khususnya utf8mb4_unicode_ci). Anda tidak boleh menggunakan UTF-8 karena UTF-8 MySQL berbeda dari penyandian UTF-8 yang tepat.

Apa susunan standar untuk MySQL?

Pengaturan dan susunan karakter server MySQL default adalah latin1 dan latin1_swedish_ci , tetapi Anda dapat menentukan kumpulan karakter di server, database, tabel, .

Haruskah saya menggunakan utf8mb4 atau UTF

Perbedaan antara utf8 dan utf8mb4 adalah utf8 hanya dapat menyimpan 3 karakter byte, sedangkan utf8 dapat menyimpan 4 karakter byte. Dalam istilah Unicode, utf8 hanya dapat menyimpan karakter di Bidang Multibahasa Dasar, sedangkan utf8mb4 dapat menyimpan karakter Unicode apa pun .

Pemeriksaan apa yang harus saya gunakan untuk SQL Server?

Pemeriksaan tingkat server untuk Microsoft SQL Server . Collation server diterapkan secara default ke semua database dan objek database. Anda tidak dapat mengubah susunan saat memulihkan dari snapshot DB.