pillinetwork hesabınızla giriş yapın.

MySQL: Latin tablolarımızın veri kaybı olmadan utf-8'e çevrilmesi

Yeni bir şirkete girmişssiniz... Elinizde güzel bir proje var yaklaşık olarak 1000 servise ve bu servis çalışanlarına hizmet veriyor.

Fakat sizden önceki arkadaşlar birazcık garip bir kodlama yöntemleri kullanmışlar ve çok absürt bir veri tabanı yapısı kurmuşlar.

Şu an çalıştığım şirkette karşılaşmış olduğum belirli hataları ve çözümlerini sizlerle paylaşacağım.

İlk olarak latin olarak oluşturulmuş tablolarımızı nasıl veri kaybı olmadan utf-8'e çevirebileceğimiz konusunda.

Unix türevimizin konsolunda şu adımları sırasıyla gerçekleştiriyoruz.

Adım 1: Dump of Dump (MySQL Dump ile saf dataları alıyoruz)

1
mysqldump --user=kul -p --default-character-set=latin1 -c --insert-ignore --skip-set-charset dbname > dump.sql

Adım 2: Make (Yeni Veri Tabanı Oluştur)

1
2
3
mysql --user=user -p --execute=DROP DATABASE dbname;
CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;

Adım 3: From Dump To Clever (Eski datanın utf-8 e çevrilmesi)

1
iconv -f ISO-8859-1 -t UTF-8 dump.sql > dump_utf8.sql

Adım 4: A little modify

1
perl -pi -w -e 's/CHARSET=latin1/CHARSET=utf8/g;' dump_utf8.sql

diyerek SQL dosyamz içerisindeki create lerin popolarındaki latin yazılarını utf8 olarak değiştiriyoruz.

Adım 5: Go Back Your Hole (Eski datamızı UTF-8 veri tabanımıza geri yüklüyoruz)

1
mysql -ukul -p --max_allowed_packet=16M --default-character-set=utf8 dbname < dump_utf8.sql

/* trueorfalse yazdı. 30 Haziran 2009 17:07. 15 yorum var */

Yorumlar

teşekkurler

/* www.renkkat.blogspot.com www.dekorasyonel.blogspot.com Bloglarımızı beğendiyseniz takibe alırsanız seviniriz :) */

Ben bunun için bir strored procedure yazıp tüm alanlar üzerinde bunu çalıştırmıştım. Allah'tan çok büyük veri değildi de uzun sürmedi. Bu yazıyı tuttuklarıma ekleyeyim, ileride mutlaka lazım olacak...

Ha tabi birde, teşekkürler ;)

Harika yazı teşekkürler.
Birde şöyle bir yazı vardı zamanında. O da bu konu ile bütünleşip işe yarar.

teşekkürler, derli toplu bir şekilde sunmuşsunuz.

ve fakat konsol erişimimiz olmayan unix turevi server ya da unix turevi olmayan server için ne önerirsiniz?

@enesguler

Burada kullandığımız mantık veriyi düz asci olarak çekip ardından iconv vasıtası ile convert edip tekrardan yeni bir database e yüklemek aynı sistemi PHP veya türevleriyle aynı işi yapan bir betik hazırlanabilir. Tabiki performans acısından tablolarımızdaki verilere eş değer oranda performans sorunuyla karşılacağımız aşikardır.

/* Günce: http://www.murat-beser.com */

çok faydalı bir makale teşekkür ederim

/* sanıldığının aksine hiç bir şey kolay değildir. */

teşekkürler soracagım soruyu enesguler sormuş konsole erişim yoksa ne yapacagız?

/* KİWİ! */

@loverz bu konuyla iligli olarak daha önce de belirttiğim gibi bir PHP betiği hazırlayabiliriz.

Aslında boş bir vaktimde tüm HTML + DB 'nin tamamen nasıl convert edilebileceğine dair bir şeyler yazabilirim. Normalde de unix türevi kullandığımdan rahatlıkla konsol işlemlerini yapabiliyorum bu sebebiyetten Windoze veya Mac kullanan arkadaşlar için bir şeyler hazırlamakta fayda var.

/* Günce: http://www.murat-beser.com */

Macintosh'da bir UNIX türevi (NextStep) olduğundan terminal konusunda sorun yok. Bu bahsettiğiniz işlemlerin tümünü macintosh altında aynı yolları izleyerek yapabilirsiniz.

/* twitter */

hımm. Bunu duymak sevindirici bilgi için teşekkür ederim.

/* Günce: http://www.murat-beser.com */

Tablo eklerken cıkan hataların sebebını cozdum :) makale sayesınde tskler


teşekkürler

/* islam, TcNuke */

mysql administrator ile veritabanının yedeğini alın, veritabanının karakterinden bağımsız olarak tüm yedekler utf8 alınır.

yedek dosyasını açın, utf8 yapmak istediğiniz tabloların create sqllerindeki charakter seti ibaresini utf8 olarak değiştirin.

yedek dosyasından veritabanını tekrar yükleyin.

eline sağlık iyi bir bilgi

/* Gündeme Dair Güncel Haberler Son Sürat Haber */

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork