Collation: Alfabetik sıralama.
Collation Seçimi: (Bizim örneğimizde) veritabanındaki bilgilerin, hangi sıralama algoritması kullanarak sıralama yapacağımızı ayarladığımız veritabanı metadatası.
MySQL’de collation, char, text, longtext gibi metin girilen sahaların hangi algoritmaya göre sıralanacağını belirler. Collation, metinleri tuttuğunuz karakter seti (charset) ve kullandığınız dile göre seçilmelidir.
Bugün fark ettiğim önemli bir problem, charset olarak utf8_general_ci seçildiğinde, Türkçe karakterlerin çengeli olmayan karakterler ile bir tutularak sıralanması idi.
Örneğin MySQL, bir sorgu yaptığımda sıralamayı aşağıdaki gibi yapıyordu:
- …
- Şaban
- Salih
- Sema
- Şeyda
- Şıh
- Sincap
- …
veya
- …
- Camış
- Çilek
- Cumhuriyet
- …
Kısacası, Ş ve S, Ç ve C, I ve İ aynı karakter olarak alınmaktaydı. Böyle bir problem ilk defa başıma geldi.
Çözüm bariz sırıtıyordu: Collation’u utf8_turkish_ci yapmak. Ama nasıl? Onlarca tablo, yüzlerce saha! Tek tek yapılır mı? Olacak şey değil.
Ben de kâh İnternet’ten araştırarak, kâh kendim kafa patlatarak, bir veritabanının tüm tablolarının ve tüm tabloların bütün sahalarının collationlarını değiştiren bir PHP-SQL scripti yazdım.
Acil durumda siz de yararlanabilirsiniz:
[rawr]
<?php /* https://ubenzer.com */ $host = "localhost"; $user = "DB KULLANICI ADI"; $pass = "DB KULLANICI PAROLASI"; $database = "VERITABANI ADI"; $donusturulecek_collation = "utf8_turkish_ci"; $donusturulecek_charset = "utf8"; $db = mysql_connect($host, $user, $pass); if(!$db) { die("Baglanti hatasi."); } mysql_select_db($database); $result = mysql_query('show tables'); while($tables = mysql_fetch_array($result)) { foreach ($tables as $key => $value) { mysql_query("ALTER TABLE $value COLLATE $donusturulecek_collation"); mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET $donusturulecek_charset COLLATE $donusturulecek_collation"); } } mysql_query("ALTER DATABASE $db DEFAULT CHARACTER SET $donusturulecek_charset COLLATE $donusturulecek_collation"); echo "Tamamdir yegenim. :)"; /* https://ubenzer.com */ ?>
[/rawr]
MySQL Collation Değişimi 3 yorum aldı.
tablolar hala değişmedi?
Kod Güzel İşe Yarıyor Uzun Araştırma Yaptım Tek Sorun Var
Oda $db Değişkeninin İki Yerde Farklı Değerlerle Kullanılmaya Çalışılması
Sorunu Çözmek İse Çok Basit
$db = "DATABASE"; yerine $database = "DATABASE";
Yaparsanız ve mysql_select_db($db); Yerine mysql_select_db($database); Yaparsanız Sorunsuz Çalışacaktır.
Hazırlayan Arkadaşa Gerçekten Teşekkür Ederim…
Büyük dikkatsizlik olmuş. Uyarınız için teşekkürler, kodda gerekli düzeltmeyi yapıyorum.
Almanya’dan kalıcı oturuma izni (niederlassungserlaubnis) nasıl alınır?
Harici monitör parlaklığı klavye ile nasıl değiştirilir?
Almanya’da nasıl ehliyet aldım?
Ağaç Veri Yapısı [C++ Örnek]
Almanya’da nasıl ehliyet aldım?
Bir şirket neden uzaktan çalışmaya (remote working) izin verir?
-de -da eki ne zaman ayrı yazılır?
Almanya’ya gelmek için yapılan bürokratik işlemler