У меня есть база данных, в которой я удалил полнотекстовый индекс для столбца. После повторного добавления я не могу вернуть то же самое оригинальное поведение.
Вот пример.
Я создаю таблицу и устанавливаю набор символов на utf8_bin
. Я также добавляю полнотекстовый индекс:
CREATE TABLE testtable (
`Date` timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
`Headline` VARCHAR(256) CHARACTER SET utf8 NOT NULL,
`Description` text CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`Headline`)
);
ALTER TABLE testtable CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
ALTER TABLE testtable ADD FULLTEXT (Headline);
Я добавляю несколько фиктивных данных:
INSERT INTO testtable (Headline,Description) VALUES ("the story of how an apple fell from the tree","");
INSERT INTO testtable (Headline,Description) VALUES ("Apple did something blah","");
Теперь, если я ищу:
SELECT `Date`,`Headline` FROM testtable WHERE MATCH (Headline) AGAINST ('apple' IN BOOLEAN MODE);
'2020-02-19 17:16:05', 'the story of how an apple fell from the tree'
и
SELECT `Date`,`Headline` FROM testtable WHERE MATCH (Headline) AGAINST ('Apple' IN BOOLEAN MODE);
'2020-02-19 17:18:38', 'Apple did something blah'
Отлично, это работает, и это результат, который я хочу .
Теперь давайте отбросим индекс, заново добавим его и попробуем еще раз:
DROP INDEX Headline ON testtable;
#ALTER TABLE testtable CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; # I also tried this with no difference
ALTER TABLE testtable ADD FULLTEXT (Headline);
SELECT `Date`,`Headline` FROM testtable WHERE MATCH (Headline) AGAINST ('Apple' IN BOOLEAN MODE);
Дает null
в качестве ответа, но поиск apple
возвращает обе строки.
Итак, вопрос в том, что здесь происходит, и что более важно, как мне вернуть таблицу в прежнее состояние: чувствительный к регистру полнотекстовый индекс, который дает мне отдельные результаты для Apple
и apple
?
(с использованием Mysql 5.7, с движком InnoDB)
Спасибо за помощь!