2

PHP ドライバーで MongoDB を使用しており、トルコ語の文字セットを使用しています。しかし、トルコ語の文字を一致させようとすると、問題が発生します。

たとえば、私のデータベースには次の値が含まれています。

  • インギルテレ
  • イタリヤ
  • シャンピヨナ

データベースでそれらを検索しても、結果はありません。

$database->find(array('value'=>'İngiltere'));

トルコ語の文字と一致せず、自動的に一致しないため、空の結果が返されます。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0
$database->find(array('value'=>'İngiltere'));

MongoDBクラスにはfind()メソッドがありません。MongoCollectionインスタンスですか?$database

UTF-8 エンコーディングで問題が発生している可能性があります (関連するディスカッションについては、この回答を参照してください) が、共有した 3 つの文字列はすべて適切にエンコードされているようです。UTF-8 文字列を使用すると、上記の値を挿入してクエリを実行しても問題はありません。次のコード例を検討してください。

$values = ['İngiltere', 'İtalya', 'Şampiyona'];

$m = new MongoClient();
$c = $m->test->foo;
$c->drop();

foreach ($values as $value) {
    printf("Testing value: %s\n", $value);
    printf("Detected encoding: %s\n", mb_detect_encoding($value));

    $c->insert(['x' => $value]);
    var_dump($c->findOne(['x' => $value]));
    echo "\n";
}

これにより、システムで次の出力が生成されます。

Testing value: İngiltere
Detected encoding: UTF-8
array(2) {
  '_id' =>
  class MongoId#6 (1) {
    public $$id =>
    string(24) "5213d027e84df17727ca7985"
  }
  'x' =>
  string(10) "İngiltere"
}

Testing value: İtalya
Detected encoding: UTF-8
array(2) {
  '_id' =>
  class MongoId#5 (1) {
    public $$id =>
    string(24) "5213d027e84df17727ca7986"
  }
  'x' =>
  string(7) "İtalya"
}

Testing value: Şampiyona
Detected encoding: UTF-8
array(2) {
  '_id' =>
  class MongoId#4 (1) {
    public $$id =>
    string(24) "5213d027e84df17727ca7987"
  }
  'x' =>
  string(10) "Şampiyona"
}
于 2013-08-20T20:24:36.380 に答える