2009-10-14 3 views
1

통합 작업의 일환으로 데이터베이스에 nvarchar (30) 유형의 열이 있으며 WCF 서비스를 호출하고이 값을 전달해야합니다. 다른 데이터베이스의 varchar (30) 유형을 가진 열에 저장됩니다.C#에서 nvarchar의 데이터를 varchar로 변환

내 문자열을 "varchar friendly"문자열로 변환하려면 어떻게해야합니까? (예 : WCF 서비스를 호출하는 코드에서)?

업데이트 : 아무것도 아직 잘못되었습니다. 그러나 나는이 서비스를 통해 120,000 개의 레코드를 처음으로 마이그레이션하게 될 것이며 매일 약 300 개의 새로운 레코드가이 서비스를 통해 푸시 될 것입니다. 따라서 어떤 종류의 수동 개입은 매우 바람직하지 않으며 사전에 잘못 될 수있는 것에 대해 생각하고 있습니다. 대상 데이터베이스 (VARCHAR 열)를 제어 할 수는 없지만 SQL Server와 C#이 응용 프로그램에 대한 것입니다 (ADO.NET을 사용하고 있는지 확실하지 않음).

+0

Sql 서버 나는 예상하나요? ADO.NET을 사용한 데이터베이스 액세스? – Mac

+0

어떤 특정 문제가 있습니까? – Mac

+0

Mac - 당신의 솔루션 (나에게 가장 쉽다 :)과 함께 갈 것입니다.) 그리고 일이 깨지기 시작하면 다시보고하겠습니다. –

답변

8

: .NET are UTF-16 encoded의 모든 문자열 :

  • NVARCHAR 열을 검색하면 (ADO .NET을 사용하여 추정 함) 자동으로 .NET 문자열 (UT F-16, 필요한 모든 변환은 자동).
  • 이 .NET 문자열을 VARCHAR 열에 저장하면 UTF-16에서 필요한 변환도 자동으로 수행됩니다.

See here에 대한 자세한 내용은 ADO.NET의 SQL Server에 대한 데이터 형식 매핑을 참조하십시오.

모든 문자열을 원본 문자 집합에서 대상 문자 집합으로 완벽하게 변환하면됩니다.

+0

UTF-16 또는 UCS-16? –

+0

UTF-16, 방금 추가 한 링크에 따라. – Mac

+0

나는 대다수가 일반 영어 일 것이므로 문자 집합 사이의 변환에 대해 안전해야한다고 생각하지만 웹 사이트는 국제적으로 사용할 수 있으므로 사람들이 비영어권 콘텐츠를 넣기 시작하면 어떻게되는지 재미있을 것입니다. –

1

대상 열은 ASCII 문자가 너무 간단 Encoding.Convert 방법을 사용 나타내는 경우

예 :

당신이해야 할 아무것도 없다
Encoding.ASCII.GetString(Encoding.Convert(Encoding.Unicode, Encoding.ASCII, bytes)) 
1

문제는 데이터 유형이 아니라 데이터입니다. nvarchar로 저장할 수있는 가능한 모든 값에는 varchar에 해당하는 값이 없습니다 (데이터 정렬에 따라 다름). 두 번째 데이터베이스가 사용자의 통제하에있는 경우 데이터를 전달하는 가장 문제가없는 방법은 varchar 필드를 지금 nvarchar로 변경하는 것입니다.

할 수 없다면 전송하기 전에 데이터를 확인하여 변환 할 수있는 데이터인지 확인해야합니다. 데이터 문제의 종류에 따라 변환하지 않거나 다른 문자로 대체 할 문자를 제거하거나 레코드를 manaully로 고정하기보다는 보류 테이블에 저장하는 것이 좋습니다. 아메드의 제안은 가능성처럼 보입니다. 나는 그것을 시도하지 않았으므로 그것이 효과가 있을지 모르겠습니다. 운이 좋고 데이터에 문제가없는 것일 수 있습니다. nvarchar를 사용하는 모든 데이터베이스가 varchar에 적절한 국가 데이터 정렬이없는 문자를 사용하는 것은 아니지만 문제를 계획해야합니다.

+0

우리의 타겟 고객에게 주어지는 대다수의 컨텐츠는 varchar와 호환되어야합니다. 그러나 웹 사이트는 국제적으로 사용할 수 있으므로 잘못 변환되는 콘텐츠는 눈을 떼지 말고 교량을 건너십시오. –

+0

회사 이름 (❤tech)을 문의 양식에 입력하면 어떨까요? 나는 영어로 말 하긴하지만 여전히 나는 ansi가 아닌 문자를 사용하는 것을 좋아한다. –