Harmanlama ve karakter kümesi arasındaki fark nedir?


24

Veri tabanları hakkında genel bir sorum var. Harmanlama terimini genellikle veritabanlarıyla birlikte kullanırız. Karakter setinden ne kadar farklı olduğunu bilmek isterim. Harmanlama, karakter kümesinin bir alt kümesidir. Doğruysa, bir karakter kümesi altında çoklu harmanlamanın amacı nedir.


Yanıtlar:


27

Karakter setleri bir sembol listesidir. Eğer karşılaştırırsanız ASCII için Latin1 ile latin1 nedeniyle tüm amerikan kelime yazmak mümkün olacak latin1 tümünü içeren ASCII herhangi İngilizce kelime yazmak için yeterli karakterleri. Aksine, ASCII ile Batı Avrupa’ya özgü dillerin tüm kelimelerini yazamayacaksınız, çünkü 'À', 'ë', 'õ', 'Ñ' gibi karakterler eksik.

Harmanlama , karakterler arasındaki karşılaştırma hakkındadır. Bir karakter kümesinin karakterlerini karşılaştırmak için bir kurallar kümesi tanımlar.

MySQL'de, harmanlamalar genellikle bir dille ilgilidir (örneğin 'latin1_swedish_ci', 'latin1_german1_ci', vb.). Seçme sorgusu sipariş ettiğinizde, 'ö' ile başlayan bir sözcük, bazı dillerde 'o' ve 'p' ile başlayan iki kelime arasına yerleştirilir (bazı harmanlamalarla). Ancak, başka bir harmanlama ile bu karakter, sonuçta seçimi değiştiren farklı bir sonuç oluşturabilir.


Teşekkürler, Şimdi neredeyse açık. Bu yüzden, çok dilli bir siteyi planlarken harmanlamayı seçmenin ciddi bir endişe olduğunu düşünüyorum? Örneğin, harmanlama 'latin1_swedish_ci' ise, unicode dillerle uğraşırken sonuç beklemeyeceğim.
Shameer

1
Unicode'a gitmenizi öneririm, yoksa bir noktada bazı problemler yaşarsınız (örnek için asya dili). Harmanlama kullanıcının diline bağlı olacaktır. Çok dilli bir araca sahip olmak istiyorsanız bu, dikkatli olmanız gereken bir şeydir.
deadalnix

6

Önceki cevap olarak karakter seti, bir sayıya atanan bir karakter dizisidir (harfler, sayılar, ideogramlar vb.); Onları görebilmek için fontun (okuduğumuz küçük "resimler") olması gerekir. LatinX kullanarak önemliydi, çünkü her X için aynı sayı (byte) farklı bir karaktere atıfta bulunabilirdi.

Günümüzde kodlamanın seçilmesi daha önemlidir: standart, Unicode'un (ASCII ile uyumlu ancak tüm dilleri, hatta Çince ve Japonca'yı da içerecek kadar esnek) ve W3C standardını kapsayacak şekilde en başarılı temsili olan UTF-8'dir. Başka bir deyişle, tüm karakter kümelerini içerir.

Harmanlama: Bu Latince'den türetilmiş eski moda bir kelimedir. Bu, şu anlama gelir: farkları (hataları veya değişiklikleri) bulmak için bir kopyasını (el yazısıyla) orijinaliyle karşılaştırın. Geçmişte çok faydalı oldu, ama şimdi neredeyse bir arkaik olmadı çünkü belgelerimiz ve kitaplarımız bilgisayarlar kullanılarak yazılmış ve kopya her zaman orijinaliyle aynı. Örnek: İtalyancada (latince türetilmiş) "collazionare" fiili var, ancak sözlüklerde var ve kimse bunu kullanmıyor.

Dolayısıyla, harmanlama, karşılaştırma işleçlerinin davranışını tanımlar: =,>, <, <=,> = ...

Elbette bu operatörler iki dizginin aynı olup olmadığına veya bir kelimenin diğerinden daha büyük olup olmadığına karar vermek için kullanılır, sıralamak istiyorsak çok önemlidir. Harfler her dil için aynı sırada değildir, bu nedenle bir harmanlama kullanarak bir sözcük diğerinden daha büyük olabilir, ancak başka bir dil kullanamaz. Pratik bir örnek için [1] e bakınız.

  • "bin" harmanlamaları en katıdır: SELECT "b" = "B" => YANLIŞ

  • "ci" harmanlamaları büyük / küçük harfe duyarlı değildir: SELECT "b" = "B" => TRUE

  • "general" bazı farklılıkları görmezden gelir: SELECT "a" = "à" => TRUE

  • diğer bir veya daha fazla dil için özeldir. Örnek "İsveççe" (İsveççe'nin neden genellikle varsayılan olduğunu bilmiyorum)

Hala her harmanlamanın davranışının ayrıntılı olarak açıklandığı bir web sitesi arıyorum ... bu örnekler benim deneyimimden kaynaklanıyor.

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


1
İsveççe hala MySQL'in bazı parçalarında varsayılandır. MySQL'in İsveç'teki küçük bir ekip tarafından '95'te yaratıldığı zamanki mirası
Chris Wood
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.