UTF-8 Veritabanı Sorunu

3 Cevap php

Ben bir UTF-8 charset vardır ve bir PHP formu aracılığı ile eklemek için çalışırken üzerine, veritabanı aşağıdaki hatayı veriyor bir MySQL tablo var:

PDOStatement::execute(): SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE8' for column ...

Söz karakter 'e', ​​henüz bu veritabanı ve tablo UTF-8 ayarlanır düşünen bir sorun olmalı neden görmüyorum.

Edit

Ben mysql terminalden direkt denedim ve aynı sorun var ettik.

3 Cevap

http://en.wikipedia.org/wiki/UTF-8: E8 bir baytlık UTF8 karakter maksimum kullanılabilir karakter 7F daha büyüktür

Bu sizin bağlantı UTF8'den ancak ISO Latince gibi bazı diğer 8 bit kodlama ayarlı değil gibi görünüyor. Eğer sadece karakter veritabanı kullandığı ayarlamak değiştirmek utf8 veritabanını ayarlarsanız, bağlantıları farklı bir varsayılan değere (eski MySQL sürümleri için latin1) üzerinde olabilir böylece bağladıktan sonra bir ilk SET CHARACTER SET utf-8 göndermeye çalışmalısınız veritabanına. Eğer orada da doğru varsayılan değeri ayarlamak, ancak varsayılan değiştirerek aynı host üzerinde çalışan diğer siteler / apps kırmak olabileceğini akılda tutmak my.cnf erişiminiz varsa.

Sizin veritabanı UTF-8 olarak ayarlanmış olabilir, ancak veritabanı bağlantısı da UTF-8 için ayarlanması gerekir. Bir SET NAMES utf8 deyimi ile yapmalıyız. Bunu en kısa sürede size bağlanmak gibi bu yürütmek için PDO'de driver_options kullanabilirsiniz:

$handle = new PDO("mysql:host=localhost;dbname=dbname",
    'username', 'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

Emin tüm site uygun UTF-8 kullanır yapma konusunda daha detaylı bilgi için aşağıdaki iki bağlantılardan bakabilirsiniz:

Mysql değer geçirerek önce aşağıdaki kodu kullanabilirsiniz:

$val = mb_check_encoding($val, 'UTF-8') ? $val : utf8_encode($val);

Bu madde sadece bir alan varsa, dize UTF-8 dönüştürmek.