Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wykonać wyszukiwanie pełnotekstowe Mysql za pomocą chińskich znaków?

Próbowałem rozwiązać problem według sugestii RandomSeed „Języki PEŁNOTEKSTOWE i azjatyckie z MySQL 5.0”. Problem polega jednak na tym, że nie można przeprowadzić wyszukiwania dwuznakowego, chyba że ustawisz „ft_min_word_len” na 2. Ponownie, usługa hostingowa za 1 USD na miesiąc nie pozwala na to.

Dobrze, spędziłem 1 noc, aby wypracować rozwiązanie obejściowe. Koncepcja polega na konwersji wszystkich niealfabetowych znaków ciągu UTF-8 na kilka unikalnych kodów.

Oto magiczna funkcja. Zapożyczono z forum CSDN i wprowadzono pewne zmiany.

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;
}

Wynik

echo UTF2UCS("測試haha")

będzie „6e2c 8a66 haha”

Załóżmy, że masz pole o nazwie „nazwa_piosenki”. Wystarczy przekonwertować wszystkie nazwy utworów za pomocą funkcji UTF2UCS, a następnie zapisać te zaszyfrowane ciągi w polu indeksu pełnotekstowego, np. „song_name_ucs”.

Gdy następnym razem będziesz czegoś szukać, wystarczy:

$temp_string = UTF2UCS('測試', true);
SELECT * FROM song WHERE MATCH (song_name_ucs) AGAINST ('$temp_string') 

Pamiętaj, aby umieścić prawdę w drugim parametrze UTF2UCS, gdy chcesz, aby w wynikach wyszukiwania pojawiły się zarówno „測”, jak i „試”.

To może nie jest najlepsze rozwiązanie, ale nie wymaga żadnej wtyczki ani zmian w systemie. Czysty kod 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. Sprężynowy but JPA wstawka w tabeli z nazwą wielkimi literami z Hibernate

  2. Laravel zagnieżdżone relacje

  3. Interpoluj brakujące wartości w tabeli MySQL

  4. MYSQL, używający unikalnych nazw tabel VS używających identyfikatorów

  5. Hibernacja koduje źle podczas utrwalania obiektów [UTF-8]