Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mysql alemão acentua pesquisa não sensível em pesquisas de texto completo


Quando você define CHARACTER SETS individuais para suas colunas, você substitui o agrupamento definido como padrão no nível da tabela.

Cada uma de suas colunas tem o padrão latin1 agrupamento (que é latin1_swedish_ci ). Você pode vê-lo executando SHOW CREATE TABLE .

Em FULLTEXT consultas, colunas indexadas têm COERCIBILITY de 0 , ou seja, todas as consultas de texto completo são convertidas para o agrupamento usado no índice, e não vice-versa.

Você precisa remover CHARACTER SET definições de suas colunas ou defina explicitamente todas as colunas para latin1_german_ci :
CREATE TABLE `hotels` (
  `HotelNo` varchar(4) NOT NULL default '0000',
  `Hotel` varchar(80) NOT NULL default '',
  `City` varchar(100) default NULL,
  `CityFR` varchar(100) default NULL,
  `Region` varchar(50) default NULL,
  `RegionFR` varchar(100) default NULL,
  `Country` varchar(50) default NULL,
  `CountryFR` varchar(50) default NULL,
  `HotelText` text,
  `HotelTextFR` text,
  `tagsforsearch` text,
  `tagsforsearchFR` text,
  PRIMARY KEY  (`HotelNo`),
  FULLTEXT KEY `fulltextHotelSearch` (`HotelNo`,`Hotel`,`City`,`CityFR`,`Region`,`RegionFR`,`Country`,`CountryFR`,`HotelText`,`HotelTextFR`,`tagsforsearch`,`tagsforsearchFR`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;

INSERT
INTO    hotels (hotelText, HotelTextFR, tagsforsearch, tagsforsearchFR)
VALUES  ('text', 'text', 'graubünden', 'tags');

SELECT  *
FROM    hotels
WHERE   MATCH (`HotelNo`,`Hotel`,`City`,`CityFR`,`Region`,`RegionFR`,`Country`,`CountryFR`, `HotelText`, `HotelTextFR`, `tagsforsearch`, `tagsforsearchFR`)
AGAINST (CONVERT('+graubunden' USING latin1) COLLATE latin1_german1_ci IN BOOLEAN MODE)
ORDER BY
        Country ASC, Region ASC, City ASC;