1

♥,♦,♣....1 つの列に拡張 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上記の検索クエリに対してのみ表示されるはずです

4

2 に答える 2

4

問題は、入力している文字が ASCII の範囲にまったくないことです。 データの列データ型VARCHAR(20)間違っています。

  1. テーブル構造を変更する
  2. 入れ方を変える
  3. 最後に、SELECT の方法を変更します

修理済み:

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

の元の定義を見て、問題を示すSQLFiddlevarchar(20)を作成しました。

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 番目の位置には、特別な Unicode 文字ではなく、文字通りの疑問符 ( ) である ASCII 文字 (63) が含まれていることがわかります。したがって、テーブルの列に当たるとすぐに失われます。

于 2012-10-19T10:32:55.673 に答える
3

N拡張ASCII文字の検索に使用されます

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