Geprobeerd om het probleem op te lossen door de suggestie van RandomSeed "FULLTEXT en Aziatische talen met MySQL 5.0". Maar het probleem is dat u geen zoekopdracht van 2 tekens kunt uitvoeren, tenzij u "ft_min_word_len" instelt op 2. Nogmaals, de webhostingservice van $ 1 per maand staat u dat niet toe.
Oké, ik heb 1 nacht doorgebracht om een tijdelijke oplossing te vinden. Het concept is om alle niet-alfabet-tekens van een UTF-8-string om te zetten in enkele unieke codes.
Hier is de magische functie. Geleend van het CSDN-forum en enkele wijzigingen aangebracht.
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;
}
Het resultaat van
echo UTF2UCS("測試haha")
wordt "6e2c 8a66 haha"
Stel dat je een veld hebt met de naam "song_name". Je hoeft alleen maar alle songnamen te converteren met de UTF2UCS-functie, en dan die versleutelde strings op te slaan in een fulltext indexveld, bijvoorbeeld."song_name_ucs".
De volgende keer dat u iets moet zoeken, hoeft u alleen maar:
$temp_string = UTF2UCS('測試', true);
SELECT * FROM song WHERE MATCH (song_name_ucs) AGAINST ('$temp_string')
Vergeet niet om een true in de tweede parameter van UTF2UCS in te voeren wanneer zowel '測' als '試' in het zoekresultaat verschijnen.
Dit is misschien niet de beste oplossing, maar er zijn geen plug-ins of systeemwijzigingen voor nodig. Pure PHP-code.