1

我有一个表,其中一列可能包含包含扩展 ASCII 字符的数据(如♥,♦,♣....

当我使用查询搜索相同select的结果集时,结果集并没有准确地获取 ex:

create table testasci(id int,name varchar(20))

insert into testasci values(1, 'santosh');
insert into testasci values(2, 'santosh♥');
insert into testasci values(3, 'santosh♦');
insert into testasci values(4, 'santosh2');
insert into testasci values(5, 'santoshσ');
insert into testasci values(6, 'santosh3');

当我搜索任何具有扩展 ASCII 字符的名称时,如下所示

select * from testasci where name = 'santosh♥'

结果集显示 id2、id3。

那也是用问号 ( ?) 符号而不是原始字符。

有什么帮助吗?我的结果集应仅id2针对上述搜索查询显示

4

2 回答 2

4

问题是您输入的字符根本不在 ASCII 范围内。 VARCHAR(20)是您数据的错误列数据类型。

  1. 改变你的表结构
  2. 更改插入方式
  3. 最后,改变你选择的方式

固定的:

create table testasci(id int,name nvarchar(20))

insert into testasci values(1,N'santosh');
insert into testasci values(2,N'santosh♥');
insert into testasci values(3,N'santosh♦');
insert into testasci values(4,N'santosh2');
insert into testasci values(5,N'santoshσ');
insert into testasci values(6,N'santosh3');

select * from testasci where name like N'santosh♥';

查看您对 的原始定义varchar(20),我创建了一个SQLFiddle来显示问题。

select id, a.name, number, ascii(substring(a.name,number,1))
from testasci a
join master..spt_values v
  on v.number between 1 and len(a.name) and type='P'
where a.id in (2,3)
order by id, number

您会注意到 ID 2 和 3 的第 8 个位置包含 ASCII 字符 (63),它是文字问号 ( ?),而不是您的特殊 Unicode 字符。因此,一旦它击中表格列,您就会丢失它。

于 2012-10-19T10:32:55.673 回答
3

N用于搜索扩展 ascii 字符

select * from testasci where name like  N'santosh♥'
于 2012-10-19T10:22:51.007 回答