私は、collateを使ってアクセントを区別しない検索をしようとしています。しかし、それは動作しません。さらに、私のデータベースが本当に大きくなった場合、以下のコードが最適ではないかもしれないと聞きました。したがって、このコードを大規模なデータベースでも効率的にする方法に関するアイデアも高く評価されています。アクセントの影響を受けないPDOでのmysql検索
<?php
$search_FirstName="%".$_POST['First_Name']."%";
$search_LastName="%".$_POST['Last_Name']."%";
$search_Email="%".$_POST['Email']."%";
$stmt = $con->prepare('SELECT * FROM persons WHERE FirstName LIKE ? collate utf8_general_ci AND LastName LIKE ? collate utf8_general_ci AND Email LIKE ? collate utf8_general_ci');
$stmt->execute([$search_FirstName,$search_LastName,$search_Email]);
?>
コードは正常です。あなたは働かない例を挙げることができますか? 'collate'はすべての文字を期待通りのものにマップすることはできません(ただし、'ü'、 '¼'や'é'のような文字には有効です)。パフォーマンス: 'collate'は通常、mysqlがインデックスを使用するのを防ぐので、インデックスを使用するために正しい照合順序でカラムを使用する必要があります(例えば、データのutf8コピーでカラムを追加することによってこれを行うことができます。トリガーまたは生成された列として)。 – Solarflare
このインスタンスではおそらく直接的な影響はありませんが、[このUTF8に関するQ&A](http://stackoverflow.com/questions/279170/utf-8-all-the-way-through)とMySQLで使用される基本的なUTF8には根本的に欠陥があり、 'utf8mb4_'キャラクタセット照合による偏見に置き換えられるべきであるということです。 – Martin