Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apa perbedaan antara utf8_general_ci dan utf8_unicode_ci?

utf8_general_ci adalah susunan yang sangat sederhana — dan pada Unicode, sangat rusak —, yang memberikan hasil yang salah pada teks Unicode umum. Fungsinya adalah:

  • mengonversi ke bentuk D normalisasi Unicode untuk dekomposisi kanonik
  • menghapus semua karakter gabungan
  • mengubah menjadi huruf besar

Ini tidak berfungsi dengan benar di Unicode, karena tidak memahami casing Unicode. Casing unicode saja jauh lebih rumit daripada yang dapat ditangani oleh pendekatan yang berpikiran ASCII. Misalnya:

  • Huruf kecil dari “ẞ” adalah “ß”, tetapi huruf besar dari “ß” adalah “SS”.
  • Ada dua sigma Yunani huruf kecil, tapi hanya satu huruf besar satu; pertimbangkan “Σίσυφος”.
  • Huruf seperti “ø” tidak terurai menjadi “o” ditambah diakritik, artinya tidak akan diurutkan dengan benar.

Ada banyak seluk-beluk lainnya.

  1. utf8_unicode_ci menggunakan Algoritma Pengumpulan Unicode standar , mendukung apa yang disebut ekspansi dan ligatur, misalnya:Huruf Jerman (U+00DF LETTER SHARP S) diurutkan mendekati "ss"Huruf (U+0152 LATIN CAPITAL LIGATURE OE) diurutkan mendekati "OE".

utf8_general_ci tidak mendukung ekspansi/ligatur, ini mengurutkan semua huruf ini sebagai karakter tunggal, dan terkadang dalam urutan yang salah.

  1. utf8_unicode_ci adalah umumnya lebih akurat untuk semua skrip. Misalnya, pada blok Cyrillic:utf8_unicode_ci baik untuk semua bahasa ini:Rusia, Bulgaria, Belarusia, Makedonia, Serbia, dan Ukraina. Sementara utf8_general_ci baik-baik saja hanya untuk subset Cyrillic Rusia dan Bulgaria. Huruf tambahan yang digunakan dalam bahasa Belarusia, Makedonia, Serbia, dan Ukraina diurutkan tidak dengan baik.

Biaya utf8_unicode_ci apakah itu sedikit bit lebih lambat dari utf8_general_ci . Tapi itulah harga yang Anda bayar untuk kebenaran. Entah Anda dapat memiliki jawaban cepat yang salah, atau jawaban yang sedikit lebih lambat yang benar. Pilihan Anda. Sangat sulit untuk membenarkan memberikan jawaban yang salah, jadi sebaiknya asumsikan bahwa utf8_general_ci tidak ada dan selalu menggunakan utf8_unicode_ci . Yah, kecuali jika Anda menginginkan jawaban yang salah.

Sumber:http://forums.mysql.com/read .php?103,187048,188748#msg-188748



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Cara Membangun Kembali Budak MySQL yang Tidak Konsisten?

  2. Kembalikan hasil default untuk nilai IN terlepas

  3. Kesalahan saat memasang mysql2:Gagal membuat ekstensi asli permata

  4. Hitungan baris dengan PDO

  5. Cara menyisipkan array ke dalam satu pernyataan MySQL Disiapkan dengan PHP dan PDO