Mysql
 sql >> Database >  >> RDS >> Mysql

Cerca in mysql accenti tedeschi non sensibili nelle ricerche full-text

Quando definisci i singoli CHARACTER SETS per le tue colonne, sostituisci le regole di confronto che hai impostato di default a livello di tabella.

Ciascuna delle tue colonne ha latin1 predefinito confronto (che è latin1_swedish_ci ). Puoi vederlo eseguendo SHOW CREATE TABLE .

In FULLTEXT query, le colonne indicizzate hanno COERCIBILITY di 0 , ovvero tutte le query fulltext vengono convertite nelle regole di confronto utilizzate nell'indice, non viceversa.

Devi rimuovere CHARACTER SET definizioni dalle tue colonne o imposta esplicitamente tutte le colonne su 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;