Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mysql deutsche Akzente nicht sensitive Suche bei Volltextsuchen

Wenn Sie individuelle CHARACTER SETS definieren für Ihre Spalten überschreiben Sie die Sortierung, die Sie auf Tabellenebene als Standard festgelegt haben.

Jede Ihrer Spalten hat standardmäßig latin1 Sortierung (also latin1_swedish_ci ). Sie können es sehen, indem Sie SHOW CREATE TABLE ausführen .

Im FULLTEXT Abfragen haben indizierte Spalten COERCIBILITY von 0 , d.h. alle Volltextabfragen werden in die im Index verwendete Sortierung konvertiert, nicht umgekehrt.

Sie müssen CHARACTER SET entfernen Definitionen aus Ihren Spalten oder setzen Sie alle Spalten explizit auf 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;