Extended ascii characters search in SQL Server

前端 未结 2 1689
小鲜肉
小鲜肉 2021-01-23 09:37

I have a table where one column may contain data which includes extended ASCII characters (like ♥,♦,♣....)

When I search for the same using select

相关标签:
2条回答
  • 2021-01-23 10:15

    N is used for search extended ascii characters

    select * from testasci where name like  N'santosh♥'
    
    0 讨论(0)
  • 2021-01-23 10:23

    The problem is that the characters you are entering are NOT in the ASCII range at all. VARCHAR(20) is the wrong column datatype for your data.

    1. Change your table structure
    2. Change the way you insert
    3. Finally, change the way you SELECT

    Fixed:

    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♥';
    

    Looking at your original definition of varchar(20), I have created an SQLFiddle to show the problem.

    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
    

    You'll notice that the 8th position of each of ID 2 and 3 contain the ASCII character (63), which is the literal question mark (?), not your special Unicode character. So you have lost it as soon as it hit the table column.

    0 讨论(0)
提交回复
热议问题