문제

MSSQL Server가 기본적으로 Varchar 또는 Nvarchar 열로 유니 코드 데이터를 수락하도록하려면 어떻게해야합니까?

나는 당신이 현장에 배치 할 끈 앞에 n을 배치함으로써 그것을 할 수 있다는 것을 알고 있지만, 이것은 2008 년에 SQL Server 2005를 사용하는 것과 관련하여 약간 고풍으로 보인다.

도움이 되었습니까?

해결책

그만큼 N 구문은 SQL Server에서 유니 코드 문자열 리터럴을 지정하는 방법입니다.

N'Unicode string'
'ANSI string'

SQL Server는 열의 Collation 또는 데이터베이스의 Collation을 사용하여 가능한 경우 둘 사이에서 자동 변환됩니다.

따라서 문자열 리터럴이 실제로 유니 코드 문자를 포함하지 않으면 N 접두사.

그러나 당신의 끈 리터럴 인 경우 하다 유니 코드 문자를 포함한 다음 사용합니다 N 접두사가 필요합니다.

다른 팁

이것이 웹 응용 프로그램 인 경우 웹 서버가 기본 인코딩으로 UTF8을 사용하도록 할 수 있습니다. 이렇게하면 브라우저에 대한 모든 데이터는 UTF8이면 Varchar 필드에 삽입 될 수 있습니다. UTF8은 유니 코드 거래를 알지 못하는 응용 프로그램을 만드는 좋은 방법입니다.

그들은 N ''접두사의 필요성을 끄는 방법이 필요합니다. "거꾸로 호환성에 필요합니다"인수는 나에게 제로 의미가 있습니다. 물론, 그 동작을 기존 앱의 기본값으로 만들지만 기본적으로 유니 코드 문자열을 켜는 옵션을 제공합니다 (예 : n '접두사가 필요하지 않음). Oracle 및 PostgreSQL에서 문제가되지 않을 때 SQL Server의 유니 코드에 적응하기 위해 앱의 넓은 영역을 엉망으로 만들어야한다는 것을 알게되었습니다. C'mon, Microsoft!

charset 번역이 완료되지 않는 한 MSSQL 서버의 Varchar 필드에 UTF8 컨텐츠를 저장할 수는 있지만 다음과 같은 점을 알아야합니다.

  1. 응용 프로그램 이외의 관리/보고/데이터 도구는 영어 이외의 문자를 이해할 수 없습니다.

  2. 이름 목록을 정렬하는 것과 같은 언어 별 취급은 모든 언어에 대해 허용 가능한 순서로 수행되지 않을 수 있습니다.

  3. 데이터 잘림에주의해야합니다. 다중 바이트 UTF8 문자를 잘라 내면 관련된 캐릭터에 대한 데이터 손상이 발생합니다. 필드 길이를 초과하면 항상 입력을 거부해야합니다.

  4. Charset Translation을 비활성화하는 것만 큼 쉽지 않을 수 있습니다. 클라이언트 드라이버에서 끄면 클라이언트와 RDBMS CodePage 사이에 상당한 로케일 차이가있는 경우에도 여전히 재정의 할 수 있습니다. 데이터 손상.

  5. 이것이 전부라고 생각한다면 자신을 속이는 것에 대해 걱정해야 할 것입니다.

요약하면, 당신은이 길을 따라 가려는 유혹을받을 수 있지만 좋은 생각은 아닙니다. 다중 바이트를 갈 때 코드 변경이 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top