2010-05-20 57 views
0

我在MySQL中遇到大小寫敏感問題FULLTEXT搜索。MySQL FULLTEXT加重

我剛纔跟着FULLTEXT示例在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); 

...我的問題是,實例顯示選擇返回第一和第五行(「..DataBase ..」和' ..database ..')但我只得到一行('數據庫')!

該示例沒有演示該示例中表格的排序規則,但是我已在示例表格的標題和正文列上結束了latin1_general_cs。

我的MySQL版本是5.1.39-log,連接排序規則是utf8_unicode_ci。

我會很感激有人可以建議爲什麼我的經驗與手冊中的例子不同!

感謝您的任何建議。

回答

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

+0

很好 - 非常感謝你解釋這一點。現在我已經重新創建表中明確設定整理/字符集: CREATE TABLE文章( ID INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 標題VARCHAR(200), 正文, FULLTEXT(標題,正文) ) DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci; ...並且查詢現在按照檢驗結果表明它應該工作。非常感謝您的幫助。 – shearichard 2010-05-20 23:23:06