sql >> データベース >  >> RDS >> Mysql

Mysqlドイツ語アクセント全文検索での機密性の低い検索

    個々のCHARACTER SETSを定義する場合 列については、テーブルレベルでデフォルトに設定した照合を上書きします。

    各列にはデフォルトのlatin1があります 照合(latin1_swedish_ci )。 SHOW CREATE TABLEを実行すると表示されます 。

    FULLTEXTで クエリ、インデックス付き列にはCOERCIBILITYがあります 0の 、つまり、すべてのフルテキストクエリは、インデックスで使用される照合に変換されます。その逆ではありません。

    CHARACTER SETを削除する必要があります 列から定義するか、すべての列を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. Oracle ORDER BYとROWNUMを正しく使用するにはどうすればよいですか?

    2. T-SQLで文字列の一部を置き換える方法

    3. PostgreSQLおよびJDBCでのClassNotFoundException

    4. SQLite集計関数