Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment effectuer une recherche en texte intégral Mysql avec des caractères chinois ?

J'ai essayé de résoudre le problème par la suggestion de RandomSeed "FULLTEXT and Asian Languages ​​with MySQL 5.0". Mais le problème est que vous ne pouvez pas effectuer une recherche de 2 caractères à moins que vous ne définissiez "ft_min_word_len" sur 2. Encore une fois, le service d'hébergement Web à 1 $/mois ne vous permet pas de le faire.

D'accord, j'ai passé 1 nuit à trouver une solution de contournement. Le concept consiste à convertir tous les caractères non alphabétiques d'une chaîne UTF-8 en certains codes uniques.

Voici la fonction magique. Emprunté au forum CSDN et apporté quelques modifications.

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

Le résultat de

echo UTF2UCS("測試haha")

sera "6e2c 8a66 haha"

Supposons que vous ayez un champ appelé "song_name". Il vous suffit de convertir tous les noms de chansons par la fonction UTF2UCS, puis d'enregistrer ces chaînes cryptées dans un champ d'index de texte intégral, par exemple "song_name_ucs".

La prochaine fois que vous devrez effectuer une recherche, il vous suffira de :

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

N'oubliez pas de mettre un vrai dans le deuxième paramètre d'UTF2UCS lorsque vous avez besoin que '測' et '試' apparaissent dans le résultat de la recherche.

Ce n'est peut-être pas la meilleure solution, mais cela ne nécessite aucun plugin ni modification du système. Du code PHP pur.