Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql accents allemands recherche non sensible dans les recherches en texte intégral

Lorsque vous définissez des CHARACTER SETS individuels pour vos colonnes, vous remplacez le classement que vous avez défini par défaut au niveau de la table.

Chacune de vos colonnes a par défaut latin1 classement (qui est latin1_swedish_ci ). Vous pouvez le voir en exécutant SHOW CREATE TABLE .

En FULLTEXT requêtes, les colonnes indexées ont COERCIBILITY de 0 , c'est-à-dire que toutes les requêtes de texte intégral sont converties dans le classement utilisé dans l'index, et non l'inverse.

Vous devez supprimer CHARACTER SET définitions de vos colonnes ou définissez explicitement toutes les colonnes sur 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;