Soru Utf8_general_ci ve utf8_unicode_ci arasındaki farklar nelerdir? [çift]


Olası Kopyalama:
Utf8_general_ci ve utf8_unicode_ci arasındaki fark nedir 

Bir mysql veritabanı için umut verici görünen unicode için iki seçeneğim var.

utf8_general_ci unicode (multilingual), case-insensitive
utf8_unicode_ci unicode (multilingual), case-insensitive

Utf8_general_ci ve utf8_unicode_ci arasındaki farkın ne olduğunu açıklayabilir misiniz? Veritabanını tasarlarken diğerini seçmenin etkileri nelerdir?


76
2018-06-24 04:49


Menşei


Ayrıca bakınız stackoverflow.com/questions/766809/... - unor


Cevaplar:


utf8_general_ci çok basit - ve Unicode üzerinde, çok kırık - harmanlama yanlış sonuç genel Unicode metni. Yaptığı şey:

  • kanonik ayrışma için Unicode normalizasyon form D'ye dönüştürür
  • birleştiren tüm karakterleri kaldırır
  • büyük harfe dönüştürür

Unicode muhafazasını anlamadığı için bu, Unicode'da düzgün çalışmıyor. Unicode kasa tek başına ASCII-düşünceli yaklaşımın halledebileceğinden çok daha karmaşıktır. Örneğin:

  • “ẞ” nin küçük harfleri “ß” dür, ancak “ß” nin büyük harfleri “SS” dir.
  • İki küçük Yunan sigması vardır, ancak sadece bir büyük harftir; “Σίσυφος” düşünün.
  • “Ø” gibi harfler, “o” artı diastatik olarak ayrışmaz;

Başka birçok incelik var.

  1. utf8_unicode_ci standart kullanır Unicode Harmanlama AlgoritmasıÖrneğin, genişleme ve ligatürleri destekler, örneğin: Ss (U + 00DF LETTER SHARP S) Almanca dilinde nasıl okunur Mektubu U (U + 0152 LATIN SERMAYE LİGÜRATÖRÜ OE) "OE" yakınında sınıflandırılmıştır.

utf8_general_ci genişletmeler / ligatürleri desteklemez, sıralar tüm bu harfleri tek karakter olarak ve bazen yanlış sırada.

  1. utf8_unicode_ci olduğu genellikle tüm komut dosyaları için daha doğru. Örneğin, Kiril blokta: utf8_unicode_ci tüm bu diller için iyidir: Rusça, Bulgarca, Belarusça, Makedon, Sırpça ve Ukraynaca. Utf8_general_ci sadece Rusça ve Bulgarca Kiril alt kümesi için iyidir. Belarusça, Makedon, Sırpça ve Ukraynaca kullanılan ekstra harfler iyi sıralanmadı.

Maliyeti utf8_unicode_ci öyle mi küçük bit Daha yavaş utf8_general_ci. Ama bu, doğruluk için ödediğin bedel. Ya yanlış bir cevaba sahip olabilirsiniz, ya da doğru olan çok hafif bir cevap. Senin seçimin.  Yanlış cevaplar vermeyi haklı çıkarmak çok zordur, bu yüzden bunu varsaymak en iyisidir. utf8_general_ci yok ve her zaman kullanmak utf8_unicode_ci. Eh, yanlış cevaplar istemiyorsan.

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


122
2018-06-24 04:55



Dil listesi için aksesuarlar - reconbot
Bu cevabın mysql forumundan doğrudan kopyalandığı anlaşılıyor forums.mysql.com/read.php?103,187048,188748#msg-188748 - Matt
yanıtı kopyaladığınızda / yapıştırdığınızda orijinal kaynağından alıntı yapmanıza engel olmaz: P - Matt
Neden kullanmak istersin utf8_general_ci üzerinde utf8_unicode_ci, sonra? - Buns Glazing
Asla kullanma utf8_general_ci  http://stackoverflow.com/a/766996/570763 - Arda


itibaren Unicode Karakter Setleri içinde MySQL belgeleri:

Herhangi bir Unicode karakter kümesi için, _general_ci harmanlama için olanlar daha hızlıdır _unicode_ci harmanlama. Örneğin, karşılaştırmalar utf8_general_ci harmanlama daha hızlıdır, ancak karşılaştırmalara göre biraz daha az doğrudur utf8_unicode_ci. Bunun nedeni şudur utf8_unicode_ci genişletmeler gibi eşlemeleri destekler; Yani, bir karakter diğer karakterlerin kombinasyonlarına eşit olduğunda. Örneğin, Almanca ve diğer dillerdeß" eşittir "ss”. utf8_unicode_ci Ayrıca kasılmaları ve ihmal karakterleri destekler. utf8_general_ci genişletmeler, kasılmalar veya ilgisiz karakterler desteklemeyen eski bir harmanlamadır. Karakterler arasında sadece bire bir karşılaştırmalar yapabilir.


19