Difference between Sql Server Char and Varchar Data Type

Everyone knows about the basic difference between CHAR and VARCHAR data types. In this article apart from the basic difference, will discuss on one more interesting difference.
CHAR Data Type is a Fixed Length Data Type. For example if you declare a variable/column of CHAR (10) data type, then it will always take 10 bytes irrespective of whether you are storing 1 character or 10 character in this variable or column. And in this example as we have declared this variable/column as CHAR(10), so we can store max 10 characters in this column.
On the other hand VARCHAR is a variable length Data Type. For example if you declare a variable/column of VARCHAR (10) data type, it will take the number of bytes equal to the number of characters stored in this column. So, in this variable/column if you are storing only one character then it will take only one byte and if we are storing 10 characters then it will take 10 bytes. And in this example as we have declared this variable/column as VARCHAR (10), so we can store max 10 characters in this column.
Below example illustrates the basic difference explained above:

DECLARE
@CharName Char(20) = 'Biswajeet',
@VarCharName VarChar(20) = 'Biswajeet';
SELECT DATALENGTH(@CharName) CharSpaceUsed,
DATALENGTH(@VarCharName) VarCharSpaceUsed;

Result:
CharSpaceUsed    VarCharSpaceUsed
————-                —————-
20                            9
(1 row(s) affected)

Below is an interesting difference, which I have observed recently while writing some script. Concatenation of CHAR variables:

DECLARE
@FirstName Char(20) = 'Biswajeet',
@LastName Char(20) = 'Samal';
IF (@FirstName + ' ' + @LastName = 'Biswajeet Samal')
   PRINT 'I was Expecting'
ELSE
   PRINT 'Its different'
SELECT @FirstName + ' ' + @LastName AS Name,
LEN(@FirstName + ' ' + @LastName) AS Length

Result:
Its different
Name                           Length
————————–     ———
Biswajeet Samal        26
(1 row(s) affected)

Concatenation of VARCHAR variables:

DECLARE
@FirstName VarChar(20) = 'Biswajeet',
@LastName VarChar(20) = 'Samal';
IF (@FirstName + ' ' + @LastName = 'Biswajeet Samal')
  PRINT 'I was Expecting'
ELSE
  PRINT 'Its nice'
SELECT @FirstName + ' ' + @LastName AS Name,
LEN(@FirstName + ' ' + @LastName) AS Length;

Result:
I was Expecting
Name                                              Length
—————————————–      ———–
Biswajeet Samal                           17
(1 row(s) affected)

So, it is clear from the above examples that during concatenation of CHAR data type variables, it includes space in-place of unused space in the result of concatenation.

Leave a Reply