Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да извършите пълнотекстово търсене на Mysql с китайски знаци?

Опитах се да реши проблема чрез предложението на 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 код.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. защо тази заявка връща ред с нулеви стойности

  2. MySql преносима версия

  3. Python - SQL конектор:Актуализацията не работи

  4. Как да разрешите django.db.utils.IntegrityError:(1364, поле 'name' няма стойност по подразбиране)

  5. Как мога да проверя дали датата на подаване е между две дати в базата данни?