2012-05-09 13 views
5

Yaptığım tüm ithalat ve ihracat arasındaki yol boyunca bir yerde, çalıştığım bir blogdaki bir sürü metin tuhaf aksanlı bir karakterle dolu. Örneğin:MySQL verisinden tuhaf karakterleri silme

http://teamsoell.com/andy/petnames (perçinleme içerik, biliyorum)

Kötü karakterleri temizlemek ve değiştir arama mysqldump kullanarak verileri dışa ve kullanma niyetiyle bir metin düzenleyicisine yüklediğinizde, arama sadece her "bir" karakterle eşleşir.

Bu karakterleri başarılı bir şekilde avlayabildiğim herhangi birini, doğrudan MySQL'de veya mysqldump'ı kullanarak ve ardından içeriği yeniden yansıtarak nasıl kurtarabilirim?

+0

Karakterlerde sıkı ikili karşılaştırmalar yapılmasına izin veren bir metin düzenleyicisi kullanmanız gerekir. UTF-8 farkında olanlar 'a' ile aynı düşünecek 'Â' –

+0

Herhangi bir öneri? Bir OS X uygulamasını tercih ederim, ancak gerekirse bir Windows 7 makinesine erişimim var. –

cevap

8

Bu bir kodlama sorunudur; Â, Unicode'da Latin1'de görüntülenen, kırılmayan bir boşluktur (HTML öğesi  ).

Önce biz emin eşleşen çalışıyor olmak için kontrol ... böyle bir şey deneyebilirsiniz:

SELECT * FROM some_table WHERE some_field LIKE BINARY '%Â%' 

Bu some_field kötü karakteri vardır some_table herhangi satırları dönmelidir. düzgün çalışır ve aradığınız satırları bulmak varsayarsak, bu deneyin:

UPDATE some_table SET some_field = REPLACE(some_field, BINARY 'Â', '') 

Ve bu bağlantılı sayfasını temel (bu karakterleri kaldırmak gerekir, gerçekten senin kadar orada bir nbsp istemiyoruz cümleler vs arasında üst üste üç boşluk ile biter, sadece bir tane olmalıdır).

Çalışmıyorsa, kullanılmakta olan kodlamaya ve harmanlamaya bakmanız gerekir.

DÜZENLEME: Yalnızca dizelere BINARY eklenmiştir; Bu, şifrelemeden bağımsız olarak çalışmasını umar.

+0

Önerdiğiniz ilk sorguyu denedim, ancak Terminal uygulamasına yapıştırdığımda "Â" karakteri çıkarıldı. Bu bana bakmak için iyi bir yön verdi. –

+0

Oh, bu daha çok acı çekecek ... Genellikle MySQL Workbench'i kullanıyorum. Veritabanı sunucusuna ssh yapabiliyorsanız, MySQL Workbench'i bir SSH tüneli üzerinden kullanabilirsiniz. –

+0

Ah, Sequel Pro'm var ve o sorgu orada çalışıyor. Fantastik, bunun için çok teşekkürler! Yüzlerce yazıyı elle düzeltmek için kendimi neredeyse istifa ettim. –

0

Bu problemi yaşadım ve can sıkıcı ama çözülebilir.  Aynı şekilde verilerinizde tam olarak bir karakter yükü olduğunu görebilirsiniz: œ Bu, veritabanındaki değişiklikleri kodlamaya bağlıdır, ancak bu karakterlerden hiçbirine sahip olmadığınız sürece saklamak istediğiniz veri tabanınızı (örneğin, bir Euro sembolünü kullanıyorsanız), daha önce önerildiği gibi birkaç MySQL komutu ile bunları çıkartabilirsiniz. Benim durumumda

ben miras olan bir Wordpress veritabanı ile bu sorunu vardı ve Bu kayda da değer burada Wordpress için http://digwp.com/2011/07/clean-up-weird-characters-in-database/

çalışmak önceden oluşturulmuş sorguları yararlı bir dizi buldum nedenlerinden biri olduğu problemin ilk etapta, kodlamayı bir şekilde değiştirebilecek bir metin editöründe bir veritabanı açılıyor. Bu yüzden veritabanını yalnızca MySQL kullanarak ve bir metin düzenleyicisini kullanarak değiştirebilirseniz, bu daha fazla sorun yaratma riskini azaltacaktır.

0

Kabul edilen cevap benim için çalışmadı.

Buradan http://nicj.net/mysql-converting-an-incorrect-latin1-column-to-utf8/ bin karakteri için ikili kodun c2a0 olduğunu buldum (sütunu VARBINARY'a dönüştürerek ve ne döndüğüne bakmak suretiyle).

update entry set english_translation = unhex(replace(hex(english_translation),'C2A0','20')) where entry_id = 4008; 

sorgu üzerinde daha sonra normal bir kaplama uygulanabilir bir boşluk için yerine geçen ya da sadece için yerine 'yerine: O halde bu http://www.oneminuteinfo.com/2013/11/mysql-replace-non-ascii-characters.html çıkarın (değiştirme), gerçek bir çözüm bulundu.

İlgili konular