SQL Server CHAR VS NCHAR

What is the difference Between CHAR and NCHAR data types?





CHAR

  • CHAR data type is used to store non-Unicode string data of fixed-length.
  • Stores data at 1 byte per character.
  • Supports up to 8000 characters.
Syntax
char(n)

n specify the string length that ranges from 1 to 8000. Default value for n is 1.

NCHAR

  • NCHAR data type is used to store Unicode string data of fixed-length.
  • It stores data at 2 byte per character.
  • It supports up to 4000 characters.
Syntax
nchar(n)

n specify the string length that ranges from 1 to 4000. Default value for n is 1.

Lets demonstrate the difference between CHAR vs NCHAR

Data Storage Vs Length

  • CHAR

In following T-SQL, declared a variable @str that is of datatype char of size 15.

DECLARE @Str CHAR(15)
SET @Str = 'Microsoft'
SELECT @Str AS Strtext, DATALENGTH(@Str) AS StrText_OccupiedLength ,
LEN(@Str) AS StrText_length

As char has fixed-length and takes 1 bytes per character to store the data so it takes 15 bytes to store value ‘microsoft’ , even though the length of value ‘microsoft’  is 9 .

So the data storage length of characters will be the fixed-length of variable @str* 1 bytes (15 *1) =15.

  • NCHAR

In following T-SQL, declared a variable @str that is of datatype nchar of size 15.

DECLARE @Str NCHAR(15)
SET @Str = 'Microsoft'
SELECT @Str AS Strtext, DATALENGTH(@Str) AS StrText_OccupiedLength ,
LEN(@Str) AS StrText_length

As nchar has fixed-length and takes 2 bytes per character to store the data so it takes 30 bytes to store @str value ‘microsoft’ , even though the length of  value ‘microsoft’ is 9 .

So the data storage length of characters will be the fixed-length of variable @str * 2 bytes (15 *1) =30.

Using CHAR and NCHAR to store Unicode Data

  • CHAR

Char can not store unicode data, here we try to store Hindi language text to @str variable of type char.

Note: Always make sure that you prefix Unicode string literals with an N prefix.

DECLARE @Str CHAR(15)
SET @Str = N'माइक्रोसॉफ्ट'
SELECT @Str AS Strtext, DATALENGTH(@Str) AS StrText_OccupiedLength ,
LEN(@Str) AS StrText_length

 

As you can see, it does not support unicode characters /multilingual data.

  • NCHAR

NCHAR can store unicode data, again we try to store hindi language text to @str variable of type nchar.

Note: Always make sure that you prefix Unicode string literals with an N prefix.

DECLARE @Str NCHAR(15)
SET @Str = N'माइक्रोसॉफ्ट'
SELECT @Str AS Strtext, DATALENGTH(@Str) AS StrText_OccupiedLength ,
LEN(@Str) AS StrText_length

You can see, it returns the unicode data that can be seen in the first column of result set.

Also Read..

SQL Server VARCHAR VS NVARCHAR

How to get the detailed information of all datatypes in SQL Server ?




SQL Basics TutorialSQL Advance TutorialSSRSInterview Q & A
SQL Create tableSQL Server Stored ProcedureCreate a New SSRS Project List Of SQL Server basics to Advance Level Interview Q & A
SQL ALTER TABLESQL Server MergeCreate a Shared Data Source in SSRSSQL Server Question & Answer Quiz
SQL DropSQL Server PivotCreate a SSRS Tabular Report / Detail Report
..... More.... More....More
Power BI TutorialAzure TutorialPython TutorialSQL Server Tips & Tricks
Download and Install Power BI DesktopCreate an Azure storage accountLearn Python & ML Step by stepEnable Dark theme in SQL Server Management studio
Connect Power BI to SQL ServerUpload files to Azure storage containerSQL Server Template Explorer
Create Report ToolTip Pages in Power BICreate Azure SQL Database ServerDisplaying line numbers in Query Editor Window
....More....More....More

 18 total views,  2 views today

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.