Gönderen Konu: SMF Veri Tabanını Sorunsuzca UTF-8'e Dönüştürmek | canpahali.com  (Okunma sayısı 3133 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı ShadowMan

  • Kıdemli Üye
  • *
  • İleti: 295
  • Saygınlık Puanı: 8
  • Cinsiyet: Bay
  • Elveda SMF...
    • Silent Hill Türkiye
  • Smf Sürümü: Smf 2.0.4
  • Web Siteniz: http://www.silenthilltr.org/
Merhaba arkadaşlar, sizlere yararlı geleceğini düşündüğüm bir yazımı burada paylaşmak istiyorum. Umarım işinize yarar, iyi forumlar dilerim.

Yazının orjinali için: canpahali.com 'u ziyaret edebilirsiniz. Kendi kişisel blog sayfam.
Not: Link bir reklama yönlendiriyor, sanırım burada bir sıkıntı var. Ben yinede linki sizinle paylaşıyorum:
http://www.canpahali.com/mysql-utf8-donusturme/

Merhaba arkadaşlar, bu yazımda sizlere MySQL Veritabanını çeşitli platformlar için standart bir şekilde UTF-8′e dönüştürme işlemini aktarmayı planlıyorum. İlk başta uzun çalışmalar, hatalar ve çözümleri ile uğraşarak bu bilgileri edindiğimi söylemek isterim. Eğer bu yazıyı gerçekten bu işlemi yapmak amacı ile okuyorsanız sevinebilirsiniz çünkü son aşamaya geldiğinizde evrensel bir veri tabanınız olacak  ;)

Yedek almaktan kaçınmayınız, eğer yedek almazsanız veri tabanınızı kaybedebilirsiniz. Kesinlikle bu konu hakkında hiçbir sorumluluk kabul etmiyorum, bunun çok riskli bir işlem olduğunu bildiğiniz gibi verilerinizi kaybedeceğinizi de bildiğinizi varsayıyorum.


Hazırsanız başlayalım:

NOT: Sizin veri tabanı karakter setiniz ne olursa olsun bu işlemin basamakları değişmiyor. Kullandığınız CMS sistemi ne olursa olsun, işlemleri birebir uygulayabilirsiniz. Ben SMF(Simple Machines Forum) ve IP.Board sistemlerinde uyguladım.

1) Aşağıdaki PHP kodları veri tabanınıza erişerek tabloların karakter yapılarını UTF-8′e dönüştürüyor. Bu işlemi yapmak için: $dbuser, $dbpass, $dbname alanlarını eksiksiz doldurmanız gerekiyor. Düzenlemeden sonra kodları text tabanlı bir editörüde .php uzantısı ile kaydediniz ve sunucunuzun bir dizinine atarak çalıştırınız.

Kod: [Seç]
<?php
// Database info
 
$dbhost "localhost";
$dbuser "k.adi";
$dbpass "şifre";
$dbname "vt_adi";
 
//&#8212;&#8212;&#8212;&#8212;&#8212;
 
header("Content-type: text/plain");
 
$dbconn mysql_connect($dbhost$dbuser$dbpass) or die( mysql_error() );
$db mysql_select_db($dbname) or die( mysql_error() );
 
$sql "SHOW TABLES";
$result mysql_query($sql) or die( mysql_error() );
 
while ( 
$row mysql_fetch_row($result) )
{
$table mysql_real_escape_string($row[0]);
$sql "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8";
mysql_query($sql) or die( mysql_error() );
print 
"$table changed to UTF-8.\n";
}
 
mysql_close($dbconn);
?>

Tüm veri tabanı tablolarından başarılı sonuç aldığınızı gösteren satırlar ile karşılaştıktan sonra, PHPMyAdmin’de tablolarınızı kontrol ediniz ve onarınız. Artık 2. aşamaya geçebiliriz.

2) Yukarıdaki işlem sayesinde fazla uğraşmadan veri tabanı tablo yapısını UTF-8′e dönüştürdük. Şimdi tablo içerisindeki Türkçe karakterleri UTF-8 karşılıkları ile değiştireceğiz. Bu işlem sayesinde Türkçe karakterler gidecek, yerlerine UTF-8 karşılıkları gelecek. Kullanacağımız SQL sorgusunun mantığı çok basit fakat yaptığı işlevi çok önemli. Benim kullandığım eski karakter setim: latin1_swedish_ci’ydi. Bu işlem sonrası UTF-8 olacak.

Aşağıdaki SQL sorgusunu PHPMyAdmin panelinizin sorgu penceresinde çalıştırabilirsiniz.

Kod: [Seç]
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'Ä°', 'İ')WHERE ALAN_ADI LIKE '%Ä°%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'ı', 'ı')WHERE ALAN_ADI LIKE '%ı%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'Ö', 'Ö')WHERE ALAN_ADI LIKE '%Ö%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'ö', 'ö')WHERE ALAN_ADI LIKE '%ö%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'Ãœ', 'Ü')WHERE ALAN_ADI LIKE '%Ãœ%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'ü', 'ü')WHERE ALAN_ADI LIKE '%ü%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'Ç', 'Ç')WHERE ALAN_ADI LIKE '%Ç%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'ç', 'ç')WHERE ALAN_ADI LIKE '%ç%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'ÄŸ', 'ğ')WHERE ALAN_ADI LIKE '%ÄŸ%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'ÄŸ', 'Ğ')WHERE ALAN_ADI LIKE '%ÄŸ%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'ÅŸ', 'ş')WHERE ALAN_ADI LIKE '%ÅŸ%';
UPDATE TABLO_ADI SET ALAN_ADI= replace(ALAN_ADI, 'Å', 'Ş')WHERE ALAN_ADI LIKE '%Å%';

Şu konuda sizi bilgilendirmek istiyorum, yukarıdaki kodların yerleşimi kullandığınız karakter setine göre değişiyor. Hangi karakterleriniz hatalı olarka gözüküyorsa onların yerine UTF-8 karşılıklarını koyuyorsunuz. Ben yukarıdaki sorgularda “Ä°” gördüğün yere “İ” koy dedim. Sizde yerleştirmeleri ona göre yapınız. Güle güle kullanın, UTF-8 evrensel bir veri tabanınız oldu :)


NOT: Bu işlemi localhost phpmyadmin'de uygulamanızı öneriyorum, yukarıdaki işlemleri yaptıktan sonra veri tabanı yedeğini export yapın. Daha sonra UTF-8 Dil dosyalarını forumunuzun languages klasörüne atın. Daha sonra BAKIM>>VERİ TABANI>>FORUM DİLİNİ UTF-8'de DÖNÜŞTÜR seçeneğini kullanın. En son olarak veri tabanının tüm bakımlarını yapın. Eğer UTF-8'e dönüştür seçeneğinde sorun çıkarsa yukarıda export etmiş olduğunuz yedeği import yaparakta kullanabilirsiniz. Ayrıca forumun dil seçeneklerini UTF-8 Turkish yapmayı unutmayın.
« Son Düzenleme: 14 Nisan 2013, 06:05:28 Gönderen: ShadowMan »
"Bir kere girerseniz, bir daha asla çıkamazsınız."
www.silenthilltr.org

Çevrimdışı Rambo_FT

  • Master Üye
  • *
  • İleti: 1918
  • Saygınlık Puanı: 56
  • Cinsiyet: Bay
  • » Sanal Rambo [FT] ©
    • Teknolojinatör!
  • Smf Sürümü: Smf 2.0.6
  • Web Siteniz: http://www.teknolojinator.org
Hayırlı olsun :) Güzel bir anlatım da olmuş.

Çevrimdışı ShadowMan

  • Kıdemli Üye
  • *
  • İleti: 295
  • Saygınlık Puanı: 8
  • Cinsiyet: Bay
  • Elveda SMF...
    • Silent Hill Türkiye
  • Smf Sürümü: Smf 2.0.4
  • Web Siteniz: http://www.silenthilltr.org/
Eyvallah kardeş sağolasın  :)
"Bir kere girerseniz, bir daha asla çıkamazsınız."
www.silenthilltr.org

Çevrimdışı Rambo_FT

  • Master Üye
  • *
  • İleti: 1918
  • Saygınlık Puanı: 56
  • Cinsiyet: Bay
  • » Sanal Rambo [FT] ©
    • Teknolojinatör!
  • Smf Sürümü: Smf 2.0.6
  • Web Siteniz: http://www.teknolojinator.org
Bu arada benim forumun veritabanı bir hata sonucu UTF-8'e dönüşmüştü ve harfler yine karışmış, Türkçe karakterler bozulmuştu. Veritabanı yedeğini PhpMyAdmin'den indirdim, 7zip ile açtım, Notepad ile görüntüledim. Daha sonra Kodlama > ANSII olarak dönüştür'ü seçtim ve kaydedip, yedeği geri yükledim. Düzeldi :)

Bu yaptığım da veritabanında sorgu oluşturmadan karakter düzeltme işlemiydi. Ekstra bir bilgi olarak dursun burada ;)

Çevrimdışı mert1i

  • Tam Üye
  • *
  • İleti: 126
  • Saygınlık Puanı: 2
  • Cinsiyet: Bay
  • SMF Zerdüş
    • PcdmisForum Kullnıcı forumu 3D measurement
  • Smf Sürümü: Smf 2.0.8
  • Web Siteniz: www.pcdmis.0fees.net
Bu arada benim forumun veritabanı bir hata sonucu UTF-8'e dönüşmüştü ve harfler yine karışmış, Türkçe karakterler bozulmuştu. Veritabanı yedeğini PhpMyAdmin'den indirdim, 7zip ile açtım, Notepad ile görüntüledim. Daha sonra Kodlama > ANSII olarak dönüştür'ü seçtim ve kaydedip, yedeği geri yükledim. Düzeldi :)

Bu yaptığım da veritabanında sorgu oluşturmadan karakter düzeltme işlemiydi. Ekstra bir bilgi olarak dursun burada ;)

Ek bir bilgide ben vereyim..
Yukarıda söylenenlerin Denediyseniz ve bir sonuca ulaşamadıysanız bunu da denemenizi tavsiye ederim.

Yedeğinizi herşeyi denemenize rağmen karakter problemi olmadan yükleyemiyorsanız.
(Forum metaryellerinde karakter problemi olamamalı varsa önce uygun dil dosyasını yükleyerek bu problemi çözün turkish yada turkish-utf8 gibi)
  • Database yedeğinizi notepad++ ile açın.
  • Üsteki "kodlama" sekmesinden dosyanızın formatına bakın. Muhtemelen utf8'dir.
  • Tüm Türkçe karakterleri ekte verdiğim Unicode listesindeki karşılıklarıyla değiştirin. (İnce husus: "Büyük-küçük harfler uysun" ve "Aramayı sürdür'ü" aktif kılmalısınız.)
  • Bu işlemden sonra "Kodlama" sekmesinden ANSI kodlamasını seçiyoruz ve her ihitmale karşı Saveas yapın.
  • Artık DB yedeği ANSI codlamasında. Bundan sonra tüm db içeriğini tekrar çek etmeniz gerekiyor.
  • Bundan kastım özel mesajlar, katagoriler postlar gibi Türkçe karakterlerin geçeceği tek yer olan kısımları kontrol edilmesi. Örneğin bu kontrolde "ı" bununla karşılaştınız. Metin içeriğinden Bunun "ı" olduğunu anlayabilirsiniz, yada bu kodlama sisteminin tr karşılıklarına bakarakta bulabilirsiniz. TR karakterindeki karşılığını bulduktan sonra benim ekte de verdiğim unicode listesinden karşılığını bulup tümünü değiştireceksiniz. Tüm türkçe karakterlerki hatalarda bu işlemi yapmalısınız.
  • Şöyle bir örnek vereyim; ANSI Db yedeğinizde herhangi bir türkçe karakterin unicode(örnek kodlama &#X0000;) olmadığını ve bunu yerine karmaşık şekiler olduğunu bir çok yerdede tekrarlandığını gözlemlediniz.
  • "çıkış" örneğini ele alalım;
  • Buradaki "ç" karakterini uni karşılığı olan &#X00E7; ile tümünü değiştir diyeceğiz.
  • Buradaki "ı" karakteri Türkçede "ı" dır. "ı"karakterini türkçe karşılığı olan "ı"nın uni karşılığı olan &#X0131; ile tümünü değiştir diyeceğiz.
  • Buradaki "ç" karakterini uni karşılığı olan &#X00E7; ile tümünü değiştir diyeceğiz.
Türkçe karakter olması gereken tüm veriyi unicode ile değiştirdikten sonra veri tabanı yedeğinizi yüklediğinizde düzelmiş olduğunuzu göreceksiniz..


İlk denemem 4 saat sürdü baı yerleri atlamışım hatta. İkinci deneme ise 2 saat sürdü ve hatasız yükleyebilsim.

Şunlara emin olmadan bu uygulamayı asla yapmayın; Herşeyi denediniz ve sorunu çözemediniz mi? Elinizde bu uygulamadan önceki hale getirebileceğiniz yedeğiniz mevcutmu?
Üstadlar bu uygulamayı muhakak yapan vardır ama daha önce hiç bir yerde görmedim, yinede siz de bi gözden geçirin. Şunun için söylüyorum eksik gedik olmasın tamamen kendi tecrübelerim. PhpBBden beri sorunlarımı ben böyle çözüyorum. Yeni konuda açmıyorum üsteki bilgilerde çok önemli.

*.html formatında uncode listesi ekte zip tedir. Web sayfasını bulamadığım için link veremedim localden eklemek zorunda kaldım.
« Son Düzenleme: 13 Mayıs 2013, 08:35:50 Gönderen: mert1i »
SMF 2.0.6

Çevrimdışı ShadowMan

  • Kıdemli Üye
  • *
  • İleti: 295
  • Saygınlık Puanı: 8
  • Cinsiyet: Bay
  • Elveda SMF...
    • Silent Hill Türkiye
  • Smf Sürümü: Smf 2.0.4
  • Web Siteniz: http://www.silenthilltr.org/
Ekleme için teşekkürler.


Farklı yollar, yöntemler,metotlar denenebilir. Sorunlar farklı şekilde çözüme kavuşturulabilir. Sizin işinize yaramayan başkasınınkine yarayabilir. İyi forumlar.  :)
« Son Düzenleme: 30 Nisan 2014, 09:55:39 Gönderen: ShadowMan »
"Bir kere girerseniz, bir daha asla çıkamazsınız."
www.silenthilltr.org

Çevrimdışı mert1i

  • Tam Üye
  • *
  • İleti: 126
  • Saygınlık Puanı: 2
  • Cinsiyet: Bay
  • SMF Zerdüş
    • PcdmisForum Kullnıcı forumu 3D measurement
  • Smf Sürümü: Smf 2.0.8
  • Web Siteniz: www.pcdmis.0fees.net
Ekleme için teşekkürler.


Farklı yollar, yöntemler,metotlar denenebilir. Sorunlar farklı şekilde çözüme kavuşturulabilir. Sizin işinize yaramayan başkasınınkine yarayabilir. Yorumlarımızda daha az vurgu ve emeğe baltalama yapmadan kelimeler kullanırsak daha iyi yerlere varırız. İyi forumlar.
Ben kendim gibileri düşünerek yazdım. Sizin gibi uzun zamandır uğraşanları tenzi ediyorum. Hangi vurgudan bahsettiğinizi anlayamadım.
Forumda geçen hemen hemen her konuyu okudum ve uygulamaya çalıştım, olmadı. Kimseyi zan altında bırakmak gibi bir niyetim yoktu. Yanalış anlaşılan kısımlar için özür dilerim. Bunları söyerseniz düzeltebilirim
SMF 2.0.6

 

bodrum escort - escort bodrum - escort kayseri - malatya escort - escort bayan bodrum - Didim Escort Bayan - Escort Bayan Fethiye