sql >> Databasteknik >  >> RDS >> Mysql

Mysql tyska accenter okänslig sökning i fulltextsökningar

När du definierar individuella CHARACTER SETS för dina kolumner åsidosätter du sorteringen du ställt in som standard på tabellnivå.

Var och en av dina kolumner har standard latin1 sammanställning (som är latin1_swedish_ci ). Du kan se det genom att köra SHOW CREATE TABLE .

I FULLTEXT frågor, indexerade kolumner har COERCIBILITY av 0 , det vill säga alla fulltextfrågor konverteras till den sortering som används i indexet, inte vice versa.

Du måste ta bort CHARACTER SET definitioner från dina kolumner eller uttryckligen ställ in alla kolumner till 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;



  1. Exportera SQL-frågedata till Excel

  2. SQL Server-utlösare:DML-utlösare

  3. MYSQL söker efter ID i array från DB

  4. PHP:eko antal dubbletter i en tabell av de vanligaste