【问题标题】:MySQL FULLTEXT aggravationMySQL FULLTEXT 加重
【发布时间】:2011-02-22 02:48:16
【问题描述】:

我在 MySQL FULLTEXT 搜索中遇到了区分大小写的问题。

我刚刚在http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html 的 MySQL 文档中遵循 FULLTEXT 示例。为了方便参考,我会放在这里...

CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);

INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');

SELECT * FROM articles
WHERE MATCH (title,body)
AGAINST ('database' IN NATURAL LANGUAGE MODE);

...我的问题是该示例显示 SELECT 返回第一行和第五行('..DataBase..' 和 '..database..')但我只得到一个行('数据库')!

该示例未演示示例中的表具有什么排序规则,但我最终在示例表的标题和正文列上使用了 latin1_general_cs。

我的 MySQL 版本是 5.1.39-log,连接排序规则是 utf8_unicode_ci 。

如果有人能提出我的经验与手册中的示例不同的原因,我将不胜感激!

感谢任何建议。

【问题讨论】:

    标签: mysql full-text-search


    【解决方案1】:

    我猜您的默认排序规则在某处区分大小写 - 看到您最终在表中使用 latin1_general_cs。也许在刚开始的时候?

    您可以使用检查

    show variables like 'collation%'
    

    这对我来说是:

    +----------------------+-------------------+
    | Variable_name        | Value             |
    +----------------------+-------------------+
    | collation_connection | latin1_swedish_ci | 
    | collation_database   | latin1_swedish_ci | 
    | collation_server     | latin1_swedish_ci | 
    +----------------------+-------------------+
    3 rows in set (0.00 sec)
    

    所以这个例子就像我的服务器上宣传的那样工作。

    表中列的排序规则将默认为适当的数据库、服务器或表排序规则。 换句话说,列级别指定的排序规则会覆盖表级别的任何排序规则,表级别会覆盖数据库级别等。

    列排序规则是specified using this syntax:

    col_name {CHAR | VARCHAR | TEXT} (col_length)
        [CHARACTER SET charset_name]
        [COLLATE collation_name]
    

    §9.1 of the MySQL documentation了解血腥细节。

    【讨论】:

    • 太好了 - 非常感谢您对此的解释。我现在重新创建了表格,专门将排序规则/字符集设置为:CREATE TABLE 文章(id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (title,body))DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci; ...并且查询现在可以按照示例所建议的那样工作。非常感谢您的帮助。
    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多