
让我们看一个酒店表示例:
CREATE table `hotels` ( `HotelNo` varchar(4) character set latin1 NOT NulL default '0000',`Hotel` varchar(80) character set latin1 NOT NulL default '',`City` varchar(100) character set latin1 default NulL,`CityFR` varchar(100) character set latin1 default NulL,`Region` varchar(50) character set latin1 default NulL,`RegionFR` varchar(100) character set latin1 default NulL,`Country` varchar(50) character set latin1 default NulL,`CountryFR` varchar(50) character set latin1 default NulL,`HotelText` text character set latin1,`HotelTextFR` text character set latin1,`Tagsforsearch` text character set latin1,`TagsforsearchFR` text character set latin1,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;例如,在此表中,我们只有一家酒店,其地区名称=“Graubünden”(请注意umlautü字符)
现在,我想对短语进行相同的搜索匹配:
“ graubunden”和
“graubünden”
使用内置的MysqL很简单
常规搜索中的排序规则如下:
SELECT * FROM `hotels` WHERE `Region` liKE CONVERT(_utf8 '%graubunden%' USING latin1) ColLATE latin1_german1_ci这对于“ graubunden”和“graubünden”工作正常,并且
结果我收到了适当的结果,但是问题是
当我们进行MysqL全文搜索时
此SQL语句有什么问题?:
SELECT *FROM hotels WHERE MATCH (`HotelNo`,`Address`,`TagsforsearchFR`)AGAINST( CONVERT('+graubunden' USING latin1) ColLATE latin1_german1_ci IN BOolEAN MODE) ORDER BY Country ASC,Region ASC,City ASC这不会返回任何结果.
有什么想法把狗埋在哪里吗?最佳答案为列定义单个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,`TagsforsearchFR`)) ENGINE=MyISAM DEFAulT CHARSET=latin1 ColLATE=latin1_german1_ci;INSERTINTO hotels (hotelText,HotelTextFR,Tagsforsearch,TagsforsearchFR)VALUES ('text','text','graubünden','Tags');SELECT *FROM hotelsWHERE MATCH (`HotelNo`,`TagsforsearchFR`)AGAINST (CONVERT('+graubunden' USING latin1) ColLATE latin1_german1_ci IN BOolEAN MODE)ORDER BY Country ASC,City ASC; 总结 以上是内存溢出为你收集整理的全文搜索中的Mysql德语口音不敏感搜索 全部内容,希望文章能够帮你解决全文搜索中的Mysql德语口音不敏感搜索 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)