Web sitelerinde karakter kodlaması oldukça önemli bir konu. Yazılan metinlerin, cümlelerin düzgün karakterler ile görüntülenmesi içeriğin niteliği ve konusu kadar önemli. Verilerimizin görüntülenmesinde problem yaşamak istemiyorsak veritabanı depolama karakter setini doğru belirlememiz gerekmektedir. Mysql sunucumuzu kurup yapılandırırken yada yada daha önceden yapılandırılmış sunucuyu kullanım amacımıza yönelik karakter seti ayarlarını yapılandırmayı acele ederken yada dikkatsizlikten kaynaklanan sebeplerden dolayı amacımıza yönelik yapılandırmayı unutabiliyoruz. Bu acele ve dikkatsizliğimiz devamında tabloları yapılandırırken de devam ettiğinde depolama karakter seti latin_swedish gibi uft8′den farklı bir dil ayarlanmış olabilir. Verilerimizi depoladığımız tablolarımızın Uft8 gibi genel dil kodlaması haricinde yapılandırılması, sakladığımız verilerin yapısında bozulmaya sebep olmaktadır. Bu bozulma arama, sıralama ve gösterimde önümüze problem olarak çıkabilir.
Veri tabanı yapılandırmasında yaptığımız hatalı yapı üzerine yada daha önceden yapılmış hatalı yapı üzerine verilerimizi depoladık. Verilerimizi silip yeniden depolamak yerine problemli yapıyı düzelte biliriz. Düzelme işlemi için birkaç yöntem bulunuyor;
- Birden çok tablo varsa ve tek tek uğraşmak istemesseniz tüm tabloları dışarı aktarıp bir text editörle açtıktan sonra bul/değiştir komutu ile tek adımda değiştirip kaydederseniz ve database üzerindeki tüm tabloları kaldırıp, kaydettiğiniz dosyayı içeri aktarırsanız sorun çözülmüş olur. Bu yöntem pratik gibi gözüksede veri tabanı boyutu örn 100 mb olduğunda text editör de düzenlemek problem olacağı için çok sağlıklı değil.
- Veri tabanımızın kopyasını aldıktan sonra kopya üzerinde güncelleme yapmak ve işlem tamamladıktan sonra kopya veri tabanını orijinal veritabanı ile değiştirmek
- Verilerinden problem olan tabloların tabloya yapısını kopyalayın. Kopya tablonun karakter setini değiştirin. Eski tablodaki verileri CONVERT kullanarak yeni tabloya doldurun. Veri tabanı boyutunuz çok büyük ise bu yöntemi tercih etmeniz zahmetli olsa da daha sağlıklı olacaktır. MySQL MyISAM yapısında güncelleme çok tavsiye edilmez ve tablo yapısında bozulmalar neden olabilir.
- Yayinda çalisan bir veritananın da yeni tablo olusturmak yerine utf8 ile yeni bir sutun ekleyip , ayni verileri yeni sutuna “update … ” islemlerini yaparak tutmak daha basit ve hizli cozum de olabilir. Daha sonra eski sutunu “alter … ” ile encoding i degistirip ayni veriyi “update … ” ile yerine de koyabilirsiniz.
NOT : Aşağıdaki işlemleri kullanarak sadece veriyi deüistirmek yeterli degil. Aşağıdaki işlemden sonra eğer belirtilen sutunlar uzerinde index varsa onlarıda drop edip yeniden oluşturmak daha sağlıklı bir çözüm sunacaktır. Ben sql falan bulaşmam bunu php ile yaparım diyen arkadaşlar kayıt sayısı çok olan tablolarda problem yaşayabilirler fakat illa ben php ile yapacam arkadaş diyenler için yararlı bir fonsiyon olabilir.
function duzelt($metin) { $metin = trim($metin); $metin = strtolower($metin); $bul = array("ı","Å?","ü","ç","ö","Ä?","ÅŸ","Ç","Ä°","ÄŸ", "Åz","Ö","Ãœ","ı","Å?","ç","ö","Ä?","ÅŸ","Ç","Ä°","ÄŸ", "Åz","Ö","Ãœ","ü","ÄŸ"); $duzelt = array("ı","ş","ü","ç","ö","ğ","ş","Ç","i","ğ","Ş", "Ö","Ü","ı", "ş", "ç", "ö", "ğ", "ş", "Ç", "i", "ğ", "Ş", "Ö", "Ü", "ü", "ğ"); $metin = str_replace($bul, $duzelt, $metin ); return $metin; }
Kopya Veri tabanı Üzerinde Güncelleme Yapmak
--Mevcut tabloların karakter setini değiştirmek için; ALTER TABLE `users` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; --Database için; ALTER DATABASE `test_database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; --Kullanıcı Tablosunda İsim Sutunundaki Kayıtları Uft8'e Çevirir UPDATE users SET name = REPLACE (name, 'ÅŸ', 'ş' ) ; UPDATE users SET name = REPLACE (name, 'Åž', 'Ş' ) ; UPDATE users SET name = REPLACE (name, 'Ç', 'Ç' ) ; UPDATE users SET name = REPLACE (name, 'ç', 'ç' ) ; UPDATE users SET name = REPLACE (name, 'Ã?', 'Ö' ) ; UPDATE users SET name = REPLACE (name, 'Ö', 'Ö' ) ; UPDATE users SET name = REPLACE (name, 'ö', 'ö' ); UPDATE users SET name = REPLACE (name, 'ü', 'ü' ) ; UPDATE users SET name = REPLACE (name, 'ÄŸ', 'ğ' ) ; UPDATE users SET name = REPLACE (name, 'ý', 'ı' ) ; UPDATE users SET name = REPLACE (name, 'Ä°', 'İ' ) ; UPDATE users SET name = REPLACE (name, 'Ãœ', 'Ü' ); UPDATE users SET name = REPLACE (name, 'Äž', 'Ğ' ) ; UPDATE users SET name = REPLACE (name, 'ı', 'ı' ) ; --Kullanıcı Tablosunda Mesaj Sutunundaki Kayıtları Uft8'e Çevirir UPDATE users SET message = REPLACE (message, 'ÅŸ', 'ş' ); UPDATE users SET message = REPLACE (message, 'Åž', 'Ş' ) ; UPDATE users SET message = REPLACE (message, 'Ç', 'Ç' ) ; UPDATE users SET message = REPLACE (message, 'ç', 'ç' ) ; UPDATE users SET message = REPLACE (message, 'Ã?', 'Ö' ) ; UPDATE users SET message = REPLACE (message, 'Ö', 'Ö' ) ; UPDATE users SET message = REPLACE (message, 'ö', 'ö' ) ; UPDATE users SET message = REPLACE (message, 'ü', 'ü' ) ; UPDATE users SET message = REPLACE (message, 'ÄŸ', 'ğ' ) ; UPDATE users SET message = REPLACE (message, 'ý', 'ı' ) ; UPDATE users SET message = REPLACE (message, 'Ä°', 'İ' ) ; UPDATE users SET message = REPLACE (message, 'Ãœ', 'Ü' ) ; UPDATE users SET message = REPLACE (message, 'Äž', 'Ğ' ) ; UPDATE users SET message = REPLACE (message, 'ı', 'ı' ) ; --Kullanıcı Tablosunda Firma Adı Sutunundaki Kayıtları Uft8'e Çevirir UPDATE users SET company_name = REPLACE (company_name, 'ÅŸ', 'ş' ); UPDATE users SET company_name = REPLACE (company_name, 'Åž', 'Ş' ) ; UPDATE users SET company_name = REPLACE (company_name, 'Ç', 'Ç' ) ; UPDATE users SET company_name = REPLACE (company_name, 'ç', 'ç' ) ; UPDATE users SET company_name = REPLACE (company_name, 'Ã?', 'Ö' ) ; UPDATE users SET company_name = REPLACE (company_name, 'Ö', 'Ö' ) ; UPDATE users SET company_name = REPLACE (company_name, 'ö', 'ö' ) ; UPDATE users SET company_name = REPLACE (company_name, 'ü', 'ü' ) ; UPDATE users SET company_name = REPLACE (company_name, 'ÄŸ', 'ğ' ) ; UPDATE users SET company_name = REPLACE (company_name, 'ý', 'ı' ) ; UPDATE users SET company_name = REPLACE (company_name, 'Ä°', 'İ' ) ; UPDATE users SET company_name = REPLACE (company_name, 'Ãœ', 'Ü' ) ; UPDATE users SET company_name = REPLACE (company_name, 'Äž', 'Ğ' ) ; UPDATE users SET company_name = REPLACE (company_name, 'ı', 'ı' ) ;
Eski Tablodaki Verileri CONVERT Kullanarak Yeni Tabloya Aktarmak
- Veritabanı: varsayılan (latin1 & latin1_swedish_ci)
- Tablo: varsayılan (latin1 & latin1_swedish_ci)
- Sütun: utf8 & utf8_unicode_ci zaman aksi takdirde varsayılan (latin1 ve latin1_swedish_ci) gerekli.
--Tablo Yapısını Koyala CREATE TABLE `yeni_tablo_adi` LIKE `eski_tablo_adi`; --Karakter Setini Değiştir ALTER TABLE `table_name` CHANGE `name` `name` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL, CHANGE `message` `message` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL; CHANGE `company_name` `message` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL; --SELECT CONVERT INSERT metodu ile güncellenmiş kayıtları tabloya ekle INSERT INTO `users` (`id`,`name`,`message`,`company_name`) SELECT `id`,CONVERT(CONVERT(_latin1 `name` USING binary) USING utf8) collate utf8_unicode_ci, CONVERT(CONVERT(_latin1 `message` USING binary) USING utf8) collate utf8_unicode_ci, CONVERT(CONVERT(_latin1 `company_name` USING binary) USING utf8) collate utf8_unicode_ci, FROM `users`
Yayinda Çalisan Bir Veri Babanın da Yeni Tablo Oluşturmak Yerine Utf8 ile Yeni Bir Sutun Eklemek
- alter table to add temporary columns ALTER TABLE table_name ADD COLUMN name_tmp VARCHAR ( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL, ADD COLUMN message_tmp VARCHAR ( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL, ADD COLUMN company_tmp VARCHAR ( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL ; UPDATE table_name AS XX JOIN table_name AS YY ON XX.id = YY.id SET XX.name_tmp = CONVERT(CONVERT(_latin1 YY.name USING binary) USING utf8) collate utf8_unicode_ci, XX.message_tmp = CONVERT(CONVERT(_latin1 YY.message USING binary) USING utf8) collate utf8_unicode_ci, XX.company_tmp = CONVERT(CONVERT(_latin1 YY.company USING binary) USING utf8) collate utf8_unicode_ci ; ALTER TABLE table_name CHANGE COLUMN name VARCHAR ( 100 ) CHARACTER SET UTF8 COLLATE utf8_unicode_ci NULL, CHANGE COLUMN message VARCHAR ( 100 ) CHARACTER SET UTF8 COLLATE utf8_unicode_ci NULL, CHANGE COLUMN company VARCHAR ( 100 ) CHARACTER SET UTF8 COLLATE utf8_unicode_ci NULL ; UPDATE table_name AS XX JOIN table_name AS YY ON XX.id = YY.id SET XX.name = YY.name_tmp, XX.message = YY.message_tmp, XX.company = YY.company_tmp ; ALTER TABLE table_name DROP COLUMN name_tmp, DROP COLUMN message_tmp, DROP COLUMN company_tmp ;
Gelen Arama Kelimeleri:
- Makine ekleme mail
- latin karakter
- tablo problemi veri
- Şişe çevirme
- latin batı karakterler
- joomla utf 8 e çevirme
- joomla utf 8 e çevirme alter table dom2_zoo
- içe aktaraçağım veri tabanın karaktersetini öğrenme
- setexx
- https://yandex ru/clck/jsredir?from=yandex ru;search;web;;&text=&etext=1842 xk1l1gMgwsQ7AKM2mXPYvX2BaOChjefdAqwqOnINKJtWArB01kfWxA5IQUEGnwQk 1b592b2560da01f3c71081eeeeb6b6884c2b9eff&uuid=&state=_BLhILn4SxNIvvL0W45KSic66uCIg23qh8iRG98qeIXme