Kodlamayı doğru yapmak gerçekten zor - çok fazla katman var:
PHP'den "SET CHARSET utf8" SQL komutu, veritabanında nasıl saklanırsa saklansın, istemci tarafının (PHP) verileri utf8'de almasını sağlayacaktır. Tabii ki, önce doğru şekilde saklanmaları gerekir.
DDL tanımı ve gerçek veriler
Bir tablo / sütun için tanımlanan kodlama, verilerin o kodlamada olduğu anlamına gelmez. Olarak tanımlanmış utf8
ancak farklı kodlama olarak saklanmış bir tablonuz varsa , MySQL bunları kabul edecek ve başınız utf8
belada olacaktır. Bu, önce bunu düzeltmeniz gerektiği anlamına gelir.
Kontrol edilecekler
Her katmanda veri akışını hangi kodlamayı kontrol etmeniz gerekir.
- HTTP başlıklarını, başlıklarını kontrol edin.
- İsteğin gövdesinde gerçekten neyin gönderildiğini kontrol edin.
- MySQL'in hemen hemen her yerde kodlama içerdiğini unutmayın:
- Veri tabanı
- Tablolar
- Sütunlar
- Bir bütün olarak sunucu
- Müşteri
Her yerde doğru olanın olduğundan emin olun.
Dönüştürmek
Örneğin veri alırsanız windows-1250
ve depolamak istiyorsanız, depolamadan utf-8
önce bu SQL'i kullanın:
SET NAMES 'cp1250';
Veritabanında verileriniz varsa windows-1250
ve geri almak istiyorsanız utf8
, şunu kullanın:
SET CHARSET 'utf8';
Birkaç not daha:
- Verileri göstermek için çok "akıllı" araçlara güvenmeyin. Örneğin phpMyAdmin gerçekten kötü kodlama yapıyor (kullandığım sırada yapıyordu). Ve tüm katmanlardan geçtiği için bulması zor.
- Ayrıca, Internet Explorer, garip kurallara dayalı olarak kodlamayı "tahmin etme" gibi gerçekten aptalca bir davranışa sahipti.
- Kodlamayı değiştirebileceğiniz basit düzenleyiciler kullanın. MySQL Workbench'i tavsiye ederim.