답변:
문자열을 nvarchar
데이터 유형이 아닌 데이터 유형 으로 선언합니다.varchar
N 접두사를 사용하여 문자열을 전달하는 Transact-SQL 코드를 보았을 것입니다. 이는 후속 문자열이 유니 코드임을 나타냅니다 (N은 실제로 자국어 문자 세트를 나타냄). 이는 CHAR, VARCHAR 또는 TEXT 대신 NCHAR, NVARCHAR 또는 NTEXT 값을 전달 함을 의미합니다.
Microsoft에서 인용하려면 :
접두사 유니 코드 문자열 상수는 문자 N으로 시작합니다. N 접두사가 없으면 문자열은 데이터베이스의 기본 코드 페이지로 변환됩니다. 이 기본 코드 페이지는 특정 문자를 인식하지 못할 수 있습니다 .
이 두 데이터 유형의 차이점을 알고 싶다면 다음 SO 게시물을 참조하십시오.
databases aspfaq com
매우 의심스러운 웹 사이트로 리디렉션 ( fkref com
, za1 zeroredirect1 com
, i0z13 trackvoluum com
), 음란물, 악성 사이트와 스팸 URL을 우리의 회사 방화벽으로 표시되어있다. aspfaq.com 소유자에게 연락하여 링크를 제거하기 위해 답변을 편집했습니다.
N'
접두사로 발생한 성가신 일을 알려 드리겠습니다 . 이틀 동안 고칠 수 없었습니다.
내 데이터베이스 데이터 정렬은 SQL_Latin1_General_CP1_CI_AS 입니다.
MyCol1 이라는 열이있는 테이블이 있습니다. 그것은이다 NVARCHAR
이 쿼리는 존재하는 정확한 값 과 일치하지 않습니다 .
SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = 'ESKİ'
// 0 result
접두사 N을 사용하여 수정하십시오.
SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = N'ESKİ'
// 1 result - found!!!!
왜? latin1_general에는 큰 점이 없습니다 . 이것이 실패한 이유입니다.
1. 성능 :
where 절이 다음과 같다고 가정하십시오.
WHERE NAME='JON'
NAME 컬럼이 nvarchar 또는 nchar 이외의 유형 인 경우 N 접 두부를 지정하지 않아야합니다. 그러나 NAME 컬럼이 nvarchar 또는 nchar 유형 인 경우 N 접 두부를 지정하지 않으면 'JON'이 비 유니 코드로 처리됩니다. 이는 NAME 열의 데이터 유형과 문자열 'JON'이 다르므로 SQL Server는 한 피연산자의 유형을 다른 피연산자의 유형으로 암시 적으로 변환합니다. SQL Server가 리터럴 유형을 열 유형으로 변환하면 문제가 없지만 다른 방법으로 수행하면 열의 색인 (사용 가능한 경우)이 사용되지 않으므로 성능이 저하됩니다.
2. 문자 세트 :
열이 nvarchar 또는 nchar 유형 인 경우 WHERE 기준 / UPDATE / INSERT 절에 문자열을 지정하는 동안 항상 접두사 N을 사용하십시오. 이 작업을 수행하지 않고 문자열의 문자 중 하나 (예 : 국제 문자 (예 : -ā))가 유니 코드 인 경우 실패하거나 데이터가 손상됩니다.
N
다음 데이터 유형을 사용할 때만 사용한다는 의미CHAR, VARCHAR or TEXT
입니까 ?? `NCHAR, NVARCHAR 또는 NTEXT`는 본질적으로 유니 코드를 저장하기 때문에 따로 따로 추가 할 필요가 없습니다 .... 그렇습니까?