Hakkı kodlayan Başlarken gerçekten zor - çok fazla katmanı vardır:
PHP SQL komutu "SET CHARSET utf8" istemci tarafı (PHP) olursa olsun veritabanında saklanır, nasıl UTF8 verileri almak sağlayacaktır. Tabii ki, onlar ilk doğru muhafaza edilmesi gerekir.
DDL definition vs. real data
Bir tablo / sütun için tanımlanan kodlama gerçekten veriler kodlama olduğu anlamına gelmez. Eğer bir tablo utf8
olarak tanımlanan ancak differtent kodlama gibi saklanan sahip olsaydı, o zaman MySQL utf8
olarak onları tedavi edecek ve belada. Hangi ilk önce bu düzeltmek zorunda kalıyoruz.
What to check
Her katmanda veri akışını kodlayan ne kontrol etmeniz gerekir.
- HTTP başlıkları, başlıklarını kontrol edin.
- Gerçekten istek gövdesinde gönderilir neler edin.
- Don't forget that MySQL has encoding almost everywhere:
- Veritabanı
- Tablolar
- Sütunlar
- Bir bütün olarak sunucu
- Client
Make sure that there's the right one everywhere.
Conversion
Eğer örneğin veri alırsanız windows-1250
, ve utf-8
saklamak istiyorum, sonra saklamadan önce bu SQL kullanın:
SET NAMES 'cp1250';
Eğer windows-1250
olarak DB veri var ve utf8
kullanımını retreive istiyorsanız:
SET CHARSET 'utf8';
Last note:
Verileri göstermek için çok "akıllı" araçlar güvenmeyin. Örneğin phpMyAdmin gerçekten kötü kodlayan (ben bunu kullanarak zaman yaptığını) yapar. Ve bu yüzden bulmak zor tüm katmanları üzerinden geçer. Ayrıca, Internet Explorer garip kurallara dayalı kodlama "tahmin" gerçekten aptalca bir davranışı vardı. Eğer kodlama geçiş basit editörleri kullanmak. Ayrıca, MySQL Workbench öneririz.