Опитах се да реши проблема чрез предложението на RandomSeed "ПЪЛЕН ТЕКСТ и азиатски езици с MySQL 5.0". Но проблемът е, че не можете да извършите търсене с 2 знака, освен ако не зададете "ft_min_word_len" на 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")
ще бъде "6e2c 8a66 haha"
Да кажем, че имате поле, наречено "име_на песен". Просто трябва да преобразувате всички имена на песни чрез функцията UTF2UCS, след което да запишете тези криптирани низове в пълнотекстово индексно поле, напр. "име_на_песента"
Следващият път, когато трябва да търсите нещо, всичко, което трябва да направите, е:
$temp_string = UTF2UCS('測試', true);
SELECT * FROM song WHERE MATCH (song_name_ucs) AGAINST ('$temp_string')
Не забравяйте да поставите истина във втория параметър на UTF2UCS, когато имате нужда и от двете „測“ и „試“ да се появят в резултата от търсенето.
Това може да не е най-доброто решение, но не изисква никакви приставки или промени в системата. Чист PHP код.