내 데이터베이스에이 문자가 있습니다. 검색어로 찾으려는 경우SQL Server 데이터베이스
Select *
from Sometable
where somecolumn like '%�%'
결과가 표시되지 않습니다.
나는 그것을 ANSI 인코딩
내 데이터베이스에이 문자가 있습니다. 검색어로 찾으려는 경우SQL Server 데이터베이스
Select *
from Sometable
where somecolumn like '%�%'
결과가 표시되지 않습니다.
나는 그것을 ANSI 인코딩
일을하지 않습니다.
UCS-2 인코딩의 유효하지 않은 코드 포인트 2,048 개 (또는 기호 자체의 경우 단일 문자 U+FFFD
)와 일치 할 수 있습니다.
범위와 이진 조합문을 모두 사용하여 일치시킬 수 있습니다 (demo).
WITH T(N)
AS
(
SELECT TOP 65536 NCHAR(ROW_NUMBER() OVER (ORDER BY @@SPID))
FROM master..spt_values v1,
master..spt_values v2
)
SELECT N
FROM T
WHERE N LIKE '%[' + NCHAR(65533) + NCHAR(55296) + '-' + NCHAR(57343) + ']%' COLLATE Latin1_General_100_BIN
내가 여기서 바꿀 유일한 것은 그 2,048 코드 포인트는 특히 특정 조합에서 사용하도록 요구되고, 개별적으로 아무것도 나타내지 않아도된다는 것입니다. –
@srutzky - UCS-2가 서로 게이트 쌍을 지원하지 않는다는 것을 이해했습니다. –
마틴 : 예, UCS-2에는 서로 게이트 쌍에 대한 매핑이 없지만 모든 상위 및 하위 대리인 코드 포인트는 그 용도로 예약되어 있습니다 (UTF-16으로 구현 됨).다행히 SQL Server는 .NET 및 Windows와 마찬가지로 UTF-16 (Little Endian)입니다. 'NCHAR (0xD83C), NCHAR (0xDF78), NCHAR (0xD83C) + NCHAR (0xDF78), NCHAR (0x01F378);'을 실행하여 이것을 볼 수 있습니다. 개별적으로 코드 포인트는 의미가 없지만 올바른 조합으로 올바르게 표시됩니다. 그리고 만약 당신이 DB에서'_SC'로 끝나는 기본 데이터 정렬을 가지고 있다면, 그 네 번째 필드는'NULL' 대신에 문자를 보여줄 것입니다. –
사용 N 같은
where col like N'%�%'
why do you think ,you need N
prefix 아래의 생각 :
N 개의 접두사없이 문자 N. 문자열과접두사 유니 코드 문자열 상수 데이터베이스의 기본 코드 페이지로 변환됩니다. 이 기본 코드 페이지는 특정 문자를 인식하지 못할 수 있습니다. 마틴 스미스
덕분에, 이전 내가 이전에 하나 개의 문자 만 테스트하고 일했다,하지만 마틴이 지적했듯이, 모든 문자를 반환 .. 쿼리 아래
작동하고
select * from #demo where id like N'%�%'
COLLATE Latin1_General_100_BIN
의도만을 반환
데모 :
create table #demo
(
id nvarchar(max)
)
insert into #demo
values
(N'ﬗ'),
(N'�')
것은 알 모 에 대한 유니 코드 재, 아래 참조 당신은 그 문자
Select ascii('�')
의 아스키 코드를 찾아 ASCII
를 사용에서 문자를 검색 할 CHAR
을 사용할 수 있습니다
'COLLATE' 옵션을 추가하는 편집을해도,이 문자는 이제 하나의 문자와 일치하기 때문에 여전히 틀립니다. 같은 코드 포인트가 아니지만 문제의 캐릭터와 함께 표시되는 다른 것들입니다. 'NCHAR (0xD808) NCHAR (0xD808) LIKE N '% %'COLLATE Latin1_General_100_BIN2 THEN 'YES'ELSE 'NO'END;'다음과 같은 질의를 시도해보십시오. –
연결하십시오 해당 코드를 결합하여 LIKE
표현
Select * from Sometable
where somecolumn like '%'+CHAR(63)+'%'
사용하는 데이터 정렬은 결과에 영향을 미칠 수 있습니다. 또한 데이터를 제공하기 위해 애플리케이션에서 사용하는 인코딩 (UTF-8, UNICODE 등)에 따라 다릅니다. 또한 VARCHAR를 저장하는 방법, 또는 NVARCHAR은 사용자가 보는 것에 마지막으로 말을합니다.
이 비슷한 질문에 here 더있다
편집 @ 마크
이 간단한 테스트를 시도 : 이것은 해당 문자가 "로 승리 저장된 의미
create table sometable(somecolumn nvarchar(100) not null)
GO
insert into sometable
values
('12345')
,('123�45')
,('12345')
GO
select * from sometable
where somecolumn like '%'+CHAR(63)+'%'
GO
를? " 이 테스트에서.
see이 표시되면보고있는 앱이 무엇을 인쇄해야하는지 잘 모르고 있음을 의미합니다.
또한 OP는 아마도 쿼리를 사용하여 char이 무엇인지 알아낼 필요가 있음을 의미합니다. 또한 like처럼 출력 된 문자열은 다른 문자로 구성 될 수 있음을주의하십시오.
CHAR (63)은 단지 예일 뿐이지 만,이 바로 당신이 ASCII table 표준 심문이 될 것입니다. 지금 당장에 깊이 파고하지만 아래의 테스트에 시간
편집 @Bridge
하지 않음이는 Unicode replacement character symbol입니다
Select ascii('�'), CHAR(ascii('�')), UNICODE(N'�'), CHAR(UNICODE(N'�'))
GO
create table sometable(somecolumn nvarchar(100) not null)
GO
insert into sometable
values
('12345')
,('123�45')
,('12345')
,('12'+NCHAR(UNICODE(N'�'))+'345')
GO
select * from sometable
where somecolumn like '%'+CHAR(63)+'%'
select * from sometable
where somecolumn like '%'+NCHAR(UNICODE(N'�'))+'%'
GO
은 varchar/char 또는 nvarchar/nchar 열입니까? – gsharp
어떤 SQL Server 버전을 사용하고 있습니까? –
로 표시 될 문자가 두 개 이상 있습니다. 모두 코드 페이지에 표시되지 않습니다. 모두에 대해 동일한 그래픽 표현을 볼 수 있지만 여전히 다른 문자이며 비교 결과는 false를 반환합니다. –