MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Problemi con MongoDB PHP UTF-8

JSON e BSON possono solo codificare/decodificare stringhe UTF-8 valide, se i tuoi dati (incluso input) non sono UTF-8 devi convertirli prima di passarli a qualsiasi sistema dipendente da JSON, come questo:

$string = iconv('UTF-8', 'UTF-8//IGNORE', $string); // or
$string = iconv('UTF-8', 'UTF-8//TRANSLIT', $string); // or even
$string = iconv('UTF-8', 'UTF-8//TRANSLIT//IGNORE', $string); // not sure how this behaves

Personalmente preferisco la prima opzione, vedi iconv() pagina manuale. Altre alternative includono:

  • mb_convert_encoding()
  • utf8_encode(utf8_decode($string))

Dovresti sempre assicurarti che le tue stringhe siano codificate in UTF-8, anche quelle inviate dall'utente, tuttavia, dal momento che hai menzionato che stai migrando da MySQL a MongoDB, hai provato a esportare il tuo database corrente in CSV e a utilizzare gli script di importazione forniti con Mongo? Dovrebbero occuparsene...

MODIFICA: Ho detto che BSON può gestire solo UTF-8, ma non sono sicuro che sia esattamente vero, ho una vaga idea che BSON usi UTF-16 o UTF-32 per codificare/decodificare i dati, ma non posso controllare ora.