Обострение MySQL FULLTEXT - PullRequest
0 голосов
/ 21 мая 2010

У меня проблемы с чувствительностью к регистру в 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);

... моя проблема в том, что в примере показано, что SELECT возвращает первую и пятую строки ('..DataBase ..' и '..database ..'), но я получаю только одну строку («база данных»)!

В примере не показано, какое сопоставление имела таблица в этом примере, но в итоге я получил значения latin1_general_cs в столбцах title и body моей таблицы примера.

Моя версия MySQL - 5.1.39-log, а порядок сопоставления соединений - utf8_unicode_ci.

Буду очень признателен, если кто-нибудь подскажет, почему мой опыт отличается от примера в руководстве!

Буду благодарен за любые советы.

1 Ответ

1 голос
/ 21 мая 2010

Я полагаю, что ваше сопоставление по умолчанию где-то чувствительно к регистру - учитывая, что вы закончили с 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)

Так что пример работает так, как рекламируется на моем сервере.

Параметры сортировки столбцов в вашей таблице по умолчанию будут сравниваться с базой данных, сервером или таблицей. Другими словами, сопоставление, заданное на уровне столбца, переопределяет любое на уровне таблицы, которое переопределяет уровень базы данных и т. Д.

Сортировка столбцов указана с использованием этого синтаксиса :

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

См. §9.1 документации MySQL для подробностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...