RandomSeedの提案「MySQL5.0を使用したフルテキストとアジア言語」によって問題を解決しようとしました。ただし、問題は、「ft_min_word_len」を2に設定しない限り、2文字の検索を実行できないことです。この場合も、月額1ドルのウェブホスティングサービスでは実行できません。
了解しました。回避策を検討するために1泊しました。コンセプトは、UTF-8文字列のすべての非アルファベット文字をいくつかの一意のコードに変換することです。
これが魔法の機能です。 CSDNフォーラムから借用し、いくつかの変更を加えました。
function UTF2UCS($str, $s) {
$str = strtolower($str);
$char = 'UTF-8';
$arr = array();
$out = "";
$c = mb_strlen($str,$char);
$t = false;
for($i =0;$i<$c;$i++){
$arr[]=mb_substr($str,$i,1,$char);
}
foreach($arr as $i=>$v){
if(preg_match('/\w/i',$v,$match)){
$out .= $v;
$t = true;
}else{
if($t) $out .= " ";
if(isset($s) && $s) $out .= "+";
$out .= bin2hex(iconv("UTF-8","UCS-2",$v))." ";
$t = false;
}
}
return $out;
}
の結果
echo UTF2UCS("測試haha")
「6e2c8a66haha」になります
「song_name」というフィールドがあるとします。 UTF2UCS関数ですべての曲名を変換してから、それらの暗号化された文字列をフルテキストインデックスフィールド(「song_name_ucs」など)に保存する必要があります。
次に何かを検索する必要があるときは、次のことを行う必要があります。
$temp_string = UTF2UCS('測試', true);
SELECT * FROM song WHERE MATCH (song_name_ucs) AGAINST ('$temp_string')
検索結果に「照」と「試」の両方が表示される必要がある場合は、UTF2UCSの2番目のパラメーターにtrueを入力することを忘れないでください。
これは最善の解決策ではないかもしれませんが、プラグインやシステムへの変更は必要ありません。純粋なPHPコード。