SQL - 如何仅返回完全匹配(特殊字符)

时间:2011-12-05 20:08:32

标签: mysql sql

我有一个西班牙语单词表(INT id_word,VARCHAR(255)word)。让我们假设该表有这些记录:

  • 1 casa
  • 2 pantalon

如果我搜索单词pantalón(带有特殊字符),则将返回任何行。如何仅选择完全匹配?它目前正在返回第二行。

SELECT * FROM words WHERE word='pantalón';

谢谢!

来自ifx

解决方案,我将字段的排序规则更改为utf8_bin。

2 个答案:

答案 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的值。