MySQL / phpMyAdmin Almanca Umlaute

5 Cevap php

Ben UT8-kodlama ile Flex uygulaması var. Bu Sunucu (PHP) geri gönderiyor ve veri Mysql (UT8 charset, utf8_general_ci) için yazılı alır. I / den veritabanına Umlaute okuma / tüm yazım hiçbir problem yok.

Ben sadece Umlaute şekilde dönüştürülür olsun phpMyAdmin ile verilere bakarak, fark ettim:

ö => ö ü => ü etc.

Dediğim gibi, ben hiç problem yaşamadım. Garip şey veritabanına PHPMyAdmin doğrudan Umlaute yazarken, onlar doğru görüntülenir, bir

Şimdi bir PDF basmak ve onları doğru görüntülemek için tüm değerleri ut8_decode () aramak gerekir. Ancak, (phpmyadmin doğru görüntülenir) veritabanına manuel olarak girilen bu deşifre alamadım.

Çözme onları malforms beri ben, o daha sonra UT8 içinde Db yazılır olmadığını varsayıyorum?

  1. )But why are in the first place UT8-encoded values displayed in this strange way in the DB? 2.) How can I enter data into mysql with PHPmyAdmin in UTF-encoding? (I have set the connection to ut8).

Thx, Martin

5 Cevap

Ben uzun bir süre için aynı sorunu ile mücadele etti. Kısa sürede veritabanına bağlanmak ve phpmyadmin göründükleri gibi web uygulaması karakterleri görüntülemek gibi bu sorguyu çalıştırın:

SET adları 'utf8'

MySQL giriş ve çıkış varsaymak benim sistemlerde kurmak nedense ben girişi utf8 göndermek zaman yanlış veritabanında depolar, ancak dönüşüm çıkış için tersine, çünkü karışıklık geri olduğunu ve gelir latin1 olarak kodlanmış o (sadakatle görüntüler phpmyadmin, kullanırken hariç) tarayıcıda düzgün görüntüler. Depolandığı veritabanı alanında kullanılan karakter kümesine tarafından izin verilen, böylece hataları alabilirsiniz karakter dönüşüm sonuçları Yukarıdaki sorgu ile gerçekleşen bu dönüşüm durdurmak sürece bu doğrudur.

MySQL karakter seti için çok farklı yerlerde bu harika vardır.

Aslında UTF8 depolamak, ancak bunun yerine latin1 olarak UTF8 dizeleri depolamak değil gibi geliyor. Onlar veritabanından okuyorsanız zaman UTF8 dönüştürülen bir şekilde iseniz, onlar hala uygulamanızda doğru şekilde gösterecektir.

Bunu gibi, UTF-8 için bağlantı ayarı var mı?

SET CHARACTER SET utf8;
SET SESSION character_set_server = utf8;
SET character_set_connection = utf8;

Eğer sorun bu tür hakkında konuşurken akılda tutmak zorunda temel gerçek şudur: bayt ve metin iki farklı şeyler vardır ve bunların arasında dönüştürmek ne zaman / kullanılacak olduğunu, aynı, yani doğru karakter kodlamasını kullanmak zorunda ters dönüşüm ve kullanılan tüm karakterleri destekler biri için.

Sorun her ek dönüşüm ve dahil olduğu her ek uygulama ile, terslik için bir şans olmasıdır. Web uygulaması, tarayıcı ve DB: en azından - birden çok dönüşüm (uygulamalar-1 genellikle 2 * (sayı)) ve ilgili bir çok farklı uygulamalar her zaman vardır çünkü Web uygulamaları bu konuda en kötü durumdur. Senin durumunda, PHPMyAdmin de.

O kadar çok olduğunda dönüşüm yanlış gitti hangi söylemek zordur. O Latin1 olarak UTF-8 kodlanmış bayt yorumlamaya çalışın uygulamalar için tipik iki karakter olarak umlauts görüntüler beri sorunları PHPMyAdmin kaynaklanır gibi Ancak görünüyor. Şimdi soru, tarayıcınıza verileri ifa-zaman phpMyAdmin'in DB'den veri alır veya zaman hatalı dönüştürme olur olup olmadığıdır. Onun HTML sayfaları başlıklarında PHPMyAdmin beyan kodlama nedir? Böyle DbVisualizer gibi olmayan bir web uygulaması aracılığıyla DB erişim seçeneği var mı? Eğer öyleyse, bir dönüşümü (ve hata için böylece potansiyel) ortadan kaldırır beri, bunu.

İşte bir olasılık:

PhpMyAdmin Latin-1 olarak UTF-8 veri görüntüleme gibi geliyor. PhpMyAdmin koyuyor Content-Type başlığını kontrol edin. Eğer webdev araç ile firefox varsa Bilgiler giderek doğrudan başlıklarını görebilirsiniz -> Görünüm Yanıt Başlıkları, ya da Bilgi -> Görünüm Sayfa Bilgileri

Bir sorgu SET NAMES 'utf8' her şey size MySQL sunucuya bir bağlantı açmak, ya da sql sunucuya erişimi Admin ettiyseniz, sizin my.cnf dosyasına şu satırları ekleyebilirsiniz yürütebilirsiniz ya . Bu, her yeni bağlantı ve her yeni oluşturulan veritabanı ve tablo için ayarlanan varsayılan karakter olarak UTF-8 koyacaktır:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8