2011-02-28 3 views
5

SQL Server 2008에서 어떤 레코드가 2 바이트 문자인지 알 수있는 방법이 있습니까?SQL Server 2008에서 2 바이트 문자 검색

예를 들어, 국가가 비어있는 경우 테이블의 중국어, 한국어 및 일본어로 모든 레코드를 쿼리하고 싶습니다. 어떻게해야합니까?

귀하의 의견은 정말로 높이 평가됩니다.

나는 너희들을 혼란스럽게했을지도 모른다. 모든 것은 nvarchar에 저장됩니다. 일부 기록은 중국어로, 일부는 한국어로, 일부는 스페인어로수록되어 있습니다. 우리는 중국, 일본, 한국의 기록을 찾아서 그것에 대해 뭔가 알고 싶습니다. 말이 돼?

+1

records' 당신이 다음'rows'을 의미'에 의한 경우 'nvarchar()'열에 ** 모든 ** 행에 더블 바이트 문자가 생깁니다. 'Hello'와'你好'는 모두 2 바이트 문자로 저장됩니다. –

+0

한자 및 기타 아시아 언어에 사용되는 구형 '더블 바이트 문자 집합'(DBCS) 또는 MS의 유니 코드 ('국가 텍스트') 사용에 대해 묻고 있습니까? – DaveE

답변

5

는 SQL Server 2008의 더블 바이트 문자있는 기록을 알 수있는 방법이 있나요 : 당신은 당신이 아래의 쿼리를 사용할 수있는 유형은 nvarchar 모든 열을 찾기 위해 노력하는 경우

?

이 사용할 수 있습니다 - 더블 바이트 문자는 단일 바이트로 감소 할 수없는 경우, 다음 레코드에 CJK 있습니다

select * from tbl 
where convert(nvarchar(max),convert(varchar(max),somecolumn)) != somecolumn 
+0

당신의 방법이 효과가있는 것 같습니다. 나는 더 확인할 것이다. 고마워. – Percy

0

내가 당신을 이해한다면, 그것은이 같은 저장된 프로 시저처럼 간단 할 수있다 :

DECLARE @SearchString nvarchar(MAX) 
... 
SELECT * FROM MyTable 
WHERE Country = '' and SearchField = @SearchString 

이 SearchField는 nvarchar 있다고 가정합니다.

nvarchar 열이 있으면 거기에있는 모든 정보가 2 바이트가됩니다.

SELECT OBJECT_NAME(col.OBJECT_ID) as [TableName], col.[name] as [ColName], typ.[name] 
FROM sys.all_columns col 
INNER JOIN sys.types typ 
ON col.user_type_id = typ.user_type_id 
WHERE col.user_type_id = 231 
+1

"double byte char"은 UNICODE /'nvarchar'를 의미한다고 생각합니다. 문자 당 데이터 공간이 두 배가되기 때문입니다. – JNK

+0

네, 나도 그렇게 생각합니다. 내가하는 것과 같은 방식으로 질문을 읽습니까? –

+0

그는 "varchar"와는 반대로 어떤 필드가 nvarchar인지, 즉 UNICODE 문자를 지원할 수 있는지를 알고 싶어한다고 생각합니다. – JNK

관련 문제