[sql] T-SQL 문에서 접두사 N의 의미는 무엇이며 언제 사용해야합니까?
일부 삽입 T-SQL 쿼리에서 접두사 N을 보았습니다. 많은 사람들이 N
테이블에 값을 삽입하기 전에 사용했습니다 .
검색했지만 N
테이블에 문자열을 삽입하기 전에 를 포함하는 목적을 이해할 수 없었 습니다.
INSERT INTO Personnel.Employees
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),
이 ‘N’접두사는 어떤 용도로 사용되며 언제 사용해야합니까?
답변
문자열을 nvarchar
데이터 유형이 아닌 데이터 유형 으로 선언합니다.varchar
N 접두사를 사용하여 문자열을 전달하는 Transact-SQL 코드를 보았을 것입니다. 이는 후속 문자열이 유니 코드임을 나타냅니다 (N은 실제로 자국어 문자 세트를 나타냄). 이는 CHAR, VARCHAR 또는 TEXT 대신 NCHAR, NVARCHAR 또는 NTEXT 값을 전달 함을 의미합니다.
Microsoft에서 인용하려면 :
접두사 유니 코드 문자열 상수는 문자 N으로 시작합니다. N 접두사가 없으면 문자열은 데이터베이스의 기본 코드 페이지로 변환됩니다. 이 기본 코드 페이지는 특정 문자를 인식하지 못할 수 있습니다 .
이 두 데이터 유형의 차이점을 알고 싶다면 다음 SO 게시물을 참조하십시오.
varchar와 nvarchar의 차이점은 무엇입니까?
답변
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을 사용하십시오. 이 작업을 수행하지 않고 문자열의 문자 중 하나 (예 : 국제 문자 (예 : -ā))가 유니 코드 인 경우 실패하거나 데이터가 손상됩니다.
답변
값이 nvarchar 유형이라고 가정하면 N ”만 사용합니다.