MySQL'da Collation'lar

31 Ağustos 2009 Pazartesi - Unknown

UTF-8 bildiğiniz üzere çok geniş bir karakter setini destekliyor. Peki utf8_turkish_ci, utf8_general_ci, utf8_unicode_ci gibi collation’lar ne işe yarıyor?

Collation aslında tablodan select yaparken, tabloyu sıralarken ya da tablolar arasında join yaparken işimize yarayan bir şey. Hangi karakterlerin hangi karakterlerle aynı şeyi ifade ettiğine mysql bu bilgilere göre karar veriyor (collation tablosuna göre).

Örneğin utf8_turkish_ci olan bir tabloda,
“cafe” kelimesi için select sorgusu yazdığınızda, sorgu size “café” içeren kayıtları da döndürmez; ama tablo utf8_general_ci ya da utf8_unicode_ci ise döndürür.

Bu collation’ların tablolarına şağıdaki linkten bakılabilir:
http://www.collation-charts.org/mysql60/mysql604.utf8_turkish_ci.html
http://www.collation-charts.org/mysql60/mysql604.utf8_general_ci.european.html
http://www.collation-charts.org/mysql60/mysql604.utf8_unicode_ci.european.html

utf8_unicode_ci çokdillilik içeren sistemlerde geniş bir dil yelpazesinde sonuçlar sunuyor bize. Yaptığımız tabloların default collation’larını ve text fieldların collationlarını utf8_unicode_ci olarak ayarlarsak, üzerinde çalıştığımız sistemin çokdilliliği desteklemesini kolaylaştırmış oluruz.

Önemli bir not: Farklı collation’lar arası join işlemi mümkün değil, bu yüzden tüm database için aynı collation'ı kullanmak en temiz çözüm.

1 yorum:

zinn dedi ki...

utf8_bin: compare strings by the binary value of each character in the string
utf8_general_ci: compare strings using general language rules and using case-insensitive comparisons
utf8_general_cs: compare strings using general language rules and using case-sensitive comparisons
utf8_unicode_ci: compare “Large Set Of” strings using general language rules and using case-insensitive comparisons

http://jakakdemir.com/2009/08/04/couple-of-mysql-details-charset-collation-utf8_general_ci-vs-utf8_bin-vs-utf8_unicode_ci-date-vs-datetime-vs-timestamp/