我有一个西班牙语单词表(INT id_word,VARCHAR(255)word)。让我们假设该表有这些记录:
如果我搜索单词pantalón(带有特殊字符),则不将返回任何行。如何仅选择完全匹配?它目前正在返回第二行。
SELECT * FROM words WHERE word='pantalón';
谢谢!
来自ifx的解决方案,我将字段的排序规则更改为utf8_bin。
答案 0 :(得分:4)
这种情况发生的原因归结为整理。有一些重音敏感(在这种情况下你想要的)和其他重音不敏感的排序(这是你目前配置的)。还有区分大小写和不区分大小写的排序规则。
以下代码生成正确的结果:
create table test (
id int identity(1,1),
value nvarchar(100) collate SQL_Latin1_General_Cp437_CI_AS
)
insert into test values ('casa')
insert into test values ('pantalon')
select value collate SQL_Latin1_General_Cp437_CS_AS from test where value = 'pantalón'
以下代码会产生错误的结果:
drop table test
go
create table test (
id int identity(1,1),
value nvarchar(100) collate SQL_Latin1_General_Cp437_CI_AI
)
insert into test values ('casa')
insert into test values ('pantalon')
select value collate SQL_Latin1_General_Cp437_CS_AS from test where value = 'pantalón'
这里的关键是整理 - AI 表示不区分重音, AS 表示区分重音。
答案 1 :(得分:0)
我在我们的语言中也有这个问题,所以我做了这个,我有两个名字的coulmns,其中一个名为SearchColumn,另一个是ViewColumn,在保存数据时我用其他字符替换特殊字符。当用户想要搜索具有相同功能的内容时,我会进行更改并在SearchColumn中搜索,如果搜索匹配,我将显示ViewColumn的值。