Mysql Karakter Setini latin_swedish’den Utf8′e Çevirme
Print Friendly
Mysql Karakter Setini latin_swedish'den Utf8'e Çevirme, 6.7 out of 10 based on 15 ratings
VN:F [1.9.22_1171]
Rating: 6.7/10 (15 votes cast)

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;

  1. 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.
  2. 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
  3. 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.
  4. 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
;
VN:F [1.9.22_1171]
Rating: +2 (from 6 votes)

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

Bir Cevap Yazın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>