MySQL FULLTEXT 加重

标签 mysql full-text-search

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

我刚刚按照 MySQL doco http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html 中的全文示例进行操作。我将其发布在这里以方便引用...

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 。

如果有人能提出为什么我的经历与手册中的示例不同,我将非常感激!

感谢任何建议。

最佳答案

我猜你的默认排序规则在某处是区分大小写的 - 看到你的表中最终出现了 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了解血淋淋的细节。

关于MySQL FULLTEXT 加重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2878135/

相关文章:

php - 获取所有以字符串开头的表名

php - 在 MySQL 中全文搜索多列?

postgresql - Postgres 阻止抛出比赛

database - 如何在数据库中实现全文搜索

java - JDBC VS Hibernate

sql - 我如何编写一个 SQL 查询来返回一个项目的所有类别?

php - 如何比较不同表中的两列

具有首选语言的 SQLite FTS4

search - Sublime Text 'find in files' 在查找结果中给出 <binary>

mysql - 选择给定多行的值