Försökte lösa problemet med RandomSeeds förslag "FULLTEXT and Asian Languages with MySQL 5.0". Men problemet är att du inte kan utföra en sökning med två tecken om du inte ställer in "ft_min_word_len" till 2. Återigen, 1 $/månad webbhotell tillåter dig inte att göra det.
Okej, tillbringade en natt för att komma fram till en lösning. Konceptet är att konvertera alla tecken som inte är alfabetiska i en UTF-8-sträng till några unika koder.
Här är den magiska funktionen. Lånade från CSDN-forumet och gjorde några ändringar.
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;
}
Resultatet av
echo UTF2UCS("測試haha")
kommer att vara "6e2c 8a66 haha"
Säg att du har ett fält som heter "låtnamn". Du behöver bara konvertera alla låtnamn med UTF2UCS-funktionen och sedan spara de krypterade strängarna i ett fulltextindexfält, t.ex. "låt_namn_ucs".
Nästa gång du behöver söka efter något är allt du behöver göra:
$temp_string = UTF2UCS('測試', true);
SELECT * FROM song WHERE MATCH (song_name_ucs) AGAINST ('$temp_string')
Kom ihåg att sätta ett sant i UTF2UCS andra parameter när du behöver både '測' och '試' visas i sökresultatet.
Detta kanske inte är den bästa lösningen, men det kräver inga plugin-program eller ändringar i systemet. Ren PHP-kod.