使用utf8进行MySQL全文搜索(波斯语/阿拉伯语)

时间:2012-08-22 12:28:37

标签: php mysql full-text-search

我在UTF8 / Unicode波斯语/阿拉伯语言上遇到全文搜索问题(从查询中找不到任何内容)。

  • 在编码时使用utf8 / utf8_persian_ci设置表。
  • 使用mysql_query("SET NAMES 'UTF8'");进行Unicode查询。
  • 英文字符串工作正常。

以下是我的搜索代码:

<?php
mysql_connect("localhost", "user", "password");
mysql_select_db("search");
mysql_query("SET NAMES 'UTF8'"); 

$q = $_GET['q'];

?>
<form action="<?php $_SERVER['PHP_SELF']; ?>">
<input type="text" name="q" value="<?php echo $q; ?>">
<input type="submit" value="Search!">
</form>
<hr>
<?php
if (isset($q)) 
{
    $res = mysql_query("SELECT *, MATCH(name, description) AGAINST ('$q') AS score from search_test WHERE MATCH (name, description) AGAINST('$q') order by score desc");
    $ant = mysql_num_rows($res);
    if ($ant > 0) 
    { // query provided results – display results
        echo ("<br/><h2>Search results for \"$q\":</h2>");
        while ($result = mysql_fetch_array($res)) 
        {
            echo ("<h3>{$result['name']} ({$result['score']})</h3>{$result['description']}<br/><br/>");
        }
    }
    else 
    { // query provided 0 results – display 0 hit message
        echo ("<br/><h2>Nothing Found \"$q\" query</h2>");
    }
}
?>

问题在哪里或如何使用Unicode语言全文进行搜索?

2 个答案:

答案 0 :(得分:3)

索引列必须&lt; = 1000字节编码。

你不能对波斯语字母进行FULLTEXT搜索,因为有&gt; 1000字节编码。正如here所述。

例如,您的آزمایشی具有以下字符编码字节映射:

Array
(
    [0] => 1570
    [1] => 1586
    [2] => 1605
    [3] => 1575
    [4] => 1740
    [5] => 1588
    [6] => 1740
)

答案 1 :(得分:1)

MySQL全文搜索适用于波斯语。只需在需要的地方确认以下内容:

  1. COLLATION = utf8_persian_ci&amp; CHARACTER SET = utf8。 (数据库,表和列)。
  2. 3个字母以上的索引字。这对于阿拉伯语非常重要,ft_min_word_len = 3(请参阅show variables like "ft_%";
  3. 检查MySQL(5.5或5.6)和Engine(InnoDb或MyISAM)的版本