Tuesday, 22 April 2014

VARCHAR Vs NVARCHAR

Varchar[(n)]
NVarchar[(n)]
Basic Definition
Non-Unicode Variable Length character data type.
Example:
DECLARE @FirstName ASVARCHAR(50) =‘BASAVARAJ’
SELECT @FirstName
UNicode Variable Length character data type. It can store both non-Unicode and Unicode (i.e. Japanese, Korean etc) characters.
Example:
DECLARE @FirstName ASNVARCHAR(50)= ‘BASAVARAJ’
SELECT @FirstName
No. of Bytes required for each character
It takes 1 byte per character
Example:
DECLARE
 @FirstName ASVARCHAR(50) = ‘BASAVARAJ’
SELECT @FirstName AS FirstName,
DATALENGTH(@FirstName) AS 
Length

Result:
FirstName Length
BASAVARAJ 9
It takes 2 bytes per Unicode/Non-Unicode character.
Example:

DECLARE
 @FirstName ASNVARCHAR(50)= ‘BASAVARAJ’
SELECT @FirstName 
AS FirstName,
DATALENGTH(@FirstName) AS Length

Result:
FirstName Length
BASAVARAJ 18
Optional Parameter nrange
Optional Parameter n value can be from 1 to 8000.Can store maximum 8000 Non-Unicode characters.
Optional Parameter n value can be from 1 to 4000.Can store maximum 4000 Unicode/Non-Unicode characters
If Optional Parameter nis not specified in the variable declaration or column definition
If Optional parameter value is not specified in the variable declaration or column definition then it is considered as 1.
Example:

DECLARE
 @firstName VARCHAR =‘BASAVARAJ’
SELECT
@firstName FirstName
,DATALENGTH(@firstName) Length

Result:
FirstName Length
B 1
If Optional parameter value n is not specified in the variable declaration or column definition then it is considered as 1.
Example:
DECLARE @firstName NVARCHAR =‘BASAVARAJ’
SELECT
@firstName FirstName
,DATALENGTH(@firstName) Length

Result:
FirstName Length
B 2
If Optional Parameter nis not
specified in while using
CAST/ CONVERT functions
When this optional parameter n is not specified while using the CAST/CONVERT functions, then it is considered as 30.Example:
DECLARE @firstName VARCHAR(35)=
‘BASAVARAJ PRABHU BIRADAR INDIA ASIA’

SELECT 
CAST(@firstName ASVARCHAR) FirstName,
DATALENGTH
(CAST(@firstName ASVARCHAR)) Length

Result:

FirstName Length
BASAVARAJ PRABHU BIRADAR INDIA 30
When this optional parameter n is not specified while using the CAST CONVERT functions, then it is considered as 30.Example:
DECLARE @firstName NVARCHAR(35) =
‘BASAVARAJ PRABHU BIRADAR INDIA ASIA’

SELECT 
CAST(@firstName ASNVARCHAR) FirstName,
DATALENGTH
(CAST(@firstName ASNVARCHAR)) Length

Result:
FirstName Length
BASAVARAJ PRABHU BIRADAR INDIA 60
Which one to use?
If we know that data to be stored in the column or variable doesn’t have any Unicode characters.
If we know that the data to be stored in the column or variable can have Unicode characters.
Storage Size
Takes no. of bytes equal to the no. of Characters entered plus two bytes extra for defining offset.
Takes no. of bytes equal to twice the no. of Characters entered plus two bytes extra for defining offset.

No comments:

Post a Comment