Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara melakukan pencarian teks lengkap Mysql dengan karakter Cina?

Mencoba memecahkan masalah dengan saran RandomSeed "FULLTEXT dan Bahasa Asia dengan MySQL 5.0". Namun masalahnya adalah Anda tidak dapat melakukan pencarian 2 karakter kecuali Anda menyetel "ft_min_word_len" ke 2. Sekali lagi, layanan hosting web $1/bulan tidak mengizinkan Anda melakukan itu.

Oke, habiskan 1 malam untuk mencari solusi solusi. Konsepnya adalah untuk mengubah semua karakter non-abjad dari string UTF-8 menjadi beberapa kode unik.

Berikut adalah fungsi ajaibnya. Dipinjam dari forum CSDN dan membuat beberapa perubahan.

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

Hasil dari

echo UTF2UCS("測試haha")

akan menjadi "6e2c 8a66 haha"

Katakanlah Anda memiliki bidang bernama "song_name". Anda hanya perlu mengonversi semua nama lagu dengan fungsi UTF2UCS, lalu simpan string terenkripsi tersebut di bidang indeks teks lengkap, misalnya "song_name_ucs".

Lain kali Anda perlu mencari sesuatu, yang perlu Anda lakukan adalah:

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

Ingatlah untuk memasukkan nilai true di parameter kedua UTF2UCS saat Anda membutuhkan '測' dan '試' muncul di hasil pencarian.

Ini mungkin bukan solusi terbaik, tetapi tidak memerlukan plugin atau perubahan apa pun pada sistem. Kode PHP murni.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan posisi baris dalam kueri MYSQL

  2. Bagaimana cara menambahkan suara ke database saya dalam formulir?

  3. lewati penyalinan ke tabel tmp di disk mysql

  4. Izinkan pengguna membuat dan mengubah tabel?

  5. 504 Gateway Timeout error saat memilih 300.000 baris dari database MySQL