我必须在数据库中执行搜索。我使用 LIKE 语句,但我发现的问题是它区分大小写和重音,因此找不到结果。
例子:
insert into post VALUES('¿Qué visitar cerca del Hotel Aquamarina Beach Cancún?','Cancún es uno de los destinos más visitados en México por sus playas hermosas, ya sea para disfrutar en familia, con la pareja o para disfrutar de la buena fiesta con amigos','tugfa.PNG')
这是我的查询:
SELECT * FROM post where titulo like '%hotel aquamarina cancun beach%' or descripción like '%hotel aquamarina cancun beach%';
它没有给我任何结果。
有什么解决办法吗?
在你的
SELECT
unCOLLATION
中指定它对重音不敏感:我给你留下了微软关于它们
COLLATION
的参考资料(英文)和另一个关于口音的例子(西班牙文)。除此之外,对我来说,区分大写和小写对我来说似乎很奇怪,因为默认情况下它是不敏感的。尝试运行以下查询以查看表的设置:更新:
您正在寻找的查询以及我在评论中补充的查询是:
我从您所说的内容中了解到,您在表中有一个字段,该字段具有一定的 COLLATE,使其区分大小写和重音。显然,在这些情况下,LIKE 的行为方式相同,它
Arriba
不同于arriba
并且solución
不同于solucion
。在这些情况下,如果无法像@Kroneaux Schneider 建议的那样修改字段的 COLLATE 或 SELECT ,唯一的解决方案是改进 LIKE 以解决问题。对于大写/小写问题,我们可以这样做:
对于重音问题,解决方案有点复杂,但并非不可能。
您还可以使用多个
REPLACE
来修改 LIKE 字符串,并将每个元音修改为相应的重读版本。如果您使用的是 PostgreSQL,您可以使用unaccent模块和lower函数,您可以执行以下操作:
如果您使用的是 MySQL,您应该使用排序规则,其中 _CI 指定不区分大小写,_AC不区分重音
我提出了一个更简单的解决方案,只需在 WHERE 中应用 UPPER(field) 函数,然后在 LIKE 中以大写形式写入术语。
干杯!