2016-06-12 6 views
0

私は、collat​​eを使ってアクセントを区別しない検索をしようとしています。しかし、それは動作しません。さらに、私のデータベースが本当に大きくなった場合、以下のコードが最適ではないかもしれないと聞きました。したがって、このコードを大規模なデータベースでも効率的にする方法に関するアイデアも高く評価されています。アクセントの影響を受けない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]); 
?> 
+0

コードは正常です。あなたは働かない例を挙げることができますか? 'collat​​e'はすべての文字を期待通りのものにマップすることはできません(ただし、'ü'、 '¼'や'é'のような文字には有効です)。パフォーマンス: 'collat​​e'は通常、mysqlがインデックスを使用するのを防ぐので、インデックスを使用するために正しい照合順序でカラムを使用する必要があります(例えば、データのutf8コピーでカラムを追加することによってこれを行うことができます。トリガーまたは生成された列として)。 – Solarflare

+0

このインスタンスではおそらく直接的な影響はありませんが、[このUTF8に関するQ&A](http://stackoverflow.com/questions/279170/utf-8-all-the-way-through)とMySQLで使用される基本的なUTF8には根本的に欠陥があり、 'utf8mb4_'キャラクタセット照合による偏見に置き換えられるべきであるということです。 – Martin

答えて

0

私はあなたのデータベースの照合をlatin1_swedish_ciに直接変更できると思います。

$ stmt = $ con-> prepare( 'SELECT * FROM人名はどこにありますか?そして姓は好きで、メールは好きですか');

+0

説明がコードとどのように関係しているかはわかりません – Strawberry

関連する問題