8
Mayıs
2010

MySQL Collation Değişimi

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:

  1. Şaban
  2. Salih
  3. Sema
  4. Şeyda
  5. Şıh
  6. Sincap

veya

  1. Camış
  2. Çilek
  3. 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
 
/* http://www.ubenzer.com */
$host = "localhost";
$user = "DB KULLANICI ADI";
$pass = "DB KULLANICI PAROLASI";
$db   = "VERITABANI ADI";
 
$donusturulecek_collation = "utf8_turkish_ci";
$donusturulecek_charset   = "utf8";
 
$db = mysql_connect($host, $user, $pass);
if(!$db) {
   die("Baglanti hatasi.");
}
mysql_select_db($db);
$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. :)";
/* http://www.ubenzer.com */
?>
bu yazı 1.503 defa okundu

Site hoşunuza gitti mi? Belki arkadaşlarınızın da gider.

İstekli

Aaa Reklam

+ Yorumunuzu Ekleyin 1 yorum

  • umut 09 Temmuz 2010 19.52

    tablolar hala değişmedi?

Yorumunuzu Bırakın

Bu yazıya gönderilen yeni yorumları e-posta aracılığıyla bana bildir
Yeni gönderilenleri yorum yapmadan takip etmek için tıklayınız.

Yorumunuz başarıyla alındı. Onaylandıktan sonra yayımlanacaktır. Teşekkürler.

Twitler yükleniyor... 5 saniye sonra

Bıdı bıdı bıdı bıdı dıdı dıdı dudu dudu hıdı hıdı hödü hödü yüklüyoruz öhüm öhüm bıdı bıdı vs vs... 6 nanosaniye önce

Yüklenmenin geç olmasının sebebi ben değilim, Twitter API'sinin yavaş olması. Gudu gudu hıdı hödö büdü büdü... 25697 asır önce

Ha tabi bunları okumuşsan, bu sitenin çok gizli bir özelliğini bulmuşsun demektir. ;) Tebrikler. Bu "sürpiz yumurta"yı bulduğunu bana da haber verir misin? Tıkla! 6 dinazor önce

Geçen Yıllarda Bu Hafta

2011

Bunun Burada Ne İşi Var?

Bunun Burada Ne İşi Var?

Dün şehre inmek için Sayın Menderes Türel’in zamanında Hafif Metro ...

Windows 7’de Bilgisayarınızın Aldığı Puanı Değiştirin

Windows 7’de Bilgisayarınızın Aldığı Puanı Değiştirin

Biliyorsunuz Microsoft, Windows Vista’dan bu yana bilgisayarlar için bir performans ...

Dördüncü Sınıfın Birinci Döneminden Öğrenci Görüşleri

Dördüncü Sınıfın Birinci Döneminden Öğrenci Görüşleri

Dördüncü sınıfın yarısı bitti. Okuldan mezun olmak üzereyim. İyisiyle kötüsüyle bir ...

UBenzer’den Alın!

UBenzer’den Alın!

Ablam evdeki kullanılmayanları ayırmış, “Umut bunları sat.” dedi. Hazır elime ...

2009

Kısık Işık

Kısık Işık

Tavana asılmış tek beyaz floresan lambayı sevemedim bir türlü… “Ben ...

Antalya Toplu Taşıma Sisteminin Sorunları - 1

Antalya Toplu Taşıma Sisteminin Sorunları - 1

Antalya’da ulaşım bir ölüm. Trafik sıkışıklığı, haftada bir yönü değişen ...

2008

14 Şubat

14 Şubat

Biliyorsun bugün 14 Şubat. Daha iki gün öncesinden hazırdı zaten ...

Uyumadan Önce Son Boşluk

Uyumadan Önce Son Boşluk

Uykuya dalmadan önce düşünürüm… Kötü alışkanlıklarımdan biridir. Aklıma ne gelirse ......

NES Emulatörleri

NES Emulatörleri

Daha önceki şu iki yazımda (1.si, 2.si), çocukken bolca oynadığımız ...

Son Yorumlar