【问题标题】:Extended ascii characters search in SQL ServerSQL Server 中的扩展 ascii 字符搜索
【发布时间】:2012-10-19 10:18:25
【问题描述】:

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

当我使用 select 查询相同的内容时,结果集并没有准确获取 例如:

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

【问题讨论】:

    标签: sql-server extended-ascii


    【解决方案1】:

    问题是您输入的字符根本不在 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 字符。所以一碰到表格列,你就失去了它。

    【讨论】:

      【解决方案2】:

      N用于搜索扩展ascii字符

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

      【讨论】:

      • 现在我的前端正在以 url 编码格式发送 ♥ 符号。所以这个 ♥ 形状以 %e2%99%a5 出现在 sql 中。现在我的 sql 搜索将有这个编码值来搜索 ♥.Can我将此字符串(%e2%99%a5)解码回♥并搜索或任何其他方式?请帮助
      • 如果你使用 C#,请使用 system.text.encoding.ascii
      • 如果我在 c# 中使用 System.text.encoding.ascii,我可以将 ♥ 转换为 %e2%99%a5 ,反之亦然。但是当我的搜索字符串为 %e2%99%a5 时,我如何告诉 SQL 搜索♥,因为我只会将此字符串作为我的搜索参数传递。(从 name='%e2%99%a5 的表中选择 * ')
      猜你喜欢
      • 2019-06-11
      • 2020-08-23
      • 2021-07-23
      • 2016-08-24
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      相关资源
      最近更新 更多